J'ai défini un type de flux personnalisé
export type MyType = {
code: number,
type: number = 1,
}
Je souhaite que le paramètre type
soit défini par défaut sur 1
si aucune valeur n'est présente. Cependant, Flow se plaint de Unexpected token =
.
Cela peut-il être fait avec Flow?
Utilise actuellement Flow v0.32.0
.
Vous ne pouvez pas avoir de valeurs par défaut dans une déclaration de type.
Utilisez une classe et initialisez les valeurs par défaut à l'aide des initialiseurs de propriété: https://basarat.gitbooks.io/TypeScript/content/docs/classes.html#property-initializer
Les paramètres de fonction peuvent également avoir des valeurs par défaut. Il s'agit d'une fonctionnalité d'ECMAScript 2015.
function method(value: string = "default") { /* ... */ }
En plus de leur type défini, les paramètres par défaut peuvent également être annulés ou omis. Cependant, ils ne peuvent pas être nuls.
// @flow
function acceptsOptionalString(value: string = "foo") {
// ...
}
acceptsOptionalString("bar");
acceptsOptionalString(undefined);
acceptsOptionalString(null);
acceptsOptionalString();
https://flow.org/en/docs/types/primitives/#toc-function-parameters-with-defaults
Allez avec l'idée proposée par @basarat et utilisez une classe. Une classe existe à la fois comme type et comme valeur.
La valeur peut être initialisée. Flow reconnaît une syntaxe d'initialisation de propriété proposée, donc en utilisant Flow (pour les types) et babel (pour la prise en charge des fonctionnalités proposées), vous pouvez déclarer votre classe comme this :
// @flow
export class MyType {
code: number;
type: number = 1;
};
Le flux et les types qu'il permet de définir ne sont pas présents dans le runtime javascript. C'est pourquoi les déclarations de type ne prennent pas en charge les initialiseurs de valeur.