web-dev-qa-db-fra.com

Comment définir une valeur par défaut pour un type de flux?

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 =.

Flow error

Cela peut-il être fait avec Flow?

Utilise actuellement Flow v0.32.0.

15
amb

Vous ne pouvez pas avoir de valeurs par défaut dans une déclaration de type.

Idée possible

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

3
basarat

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

10
MH Rohman Masyhar

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.

6
Mark Palange