web-dev-qa-db-ja.com

フロータイプのデフォルト値を設定する方法

カスタムフロータイプを定義しました

export type MyType = {
  code: number,
  type: number = 1,
}

値が存在しない場合、typeパラメーターを1としてデフォルト設定する必要があります。ただし、FlowはUnexpected token =で苦情を言っています。

Flow error

これはFlowで実行できますか?

現在Flow v0.32.0を使用しています。

15
amb

型宣言にデフォルトを設定することはできません。

考えられるアイデア

クラスを使用し、プロパティ初期化子を使用してデフォルトを初期化します: https://basarat.gitbooks.io/TypeScript/content/docs/classes.html#property-initializer

3
basarat

関数パラメーターにはデフォルトを設定することもできます。これは、ECMAScript 2015の機能です。

function method(value: string = "default") { /* ... */ }

セットのタイプに加えて、デフォルトのパラメーターを無効にするか、完全に省略することもできます。ただし、それらをヌルにすることはできません。

// @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

@basaratが提案するアイデアに進み、クラスを使用します。クラスは、タイプと値の両方として存在します。

値は初期化できます。 Flowは、提案されたプロパティ初期化構文を認識するため、Flow(タイプ用)およびbabel(提案された機能サポート用)を使用して、 this のようにクラスを宣言できます。

// @flow
export class MyType {
  code: number;
  type: number = 1; 
};

フローおよびそれによって定義できるタイプは、javascriptランタイムには存在しません。それが、型宣言が値初期化子をサポートしない理由です。

6
Mark Palange