Mixed
mixed は、すべての型のスーパータイプです。すべての値は mixed です。ただし、これは、より具体的な型に絞り込まなければ、ごく少数の操作しか許可されないことを意味します。これは、mixed に対する有効な操作は、すべての型に対して有効でなければならないためです。
一般的に、プログラムにはいくつかの異なるカテゴリの型があります。
単一の型
ここでは、入力値は number のみ可能です。
1function square(n: number) {2 return n * n;3}異なる型のグループ
ここでは、入力値は string または number のいずれかになります。
1function stringifyBasicValue(value: string | number) {2 return '' + value;3}別の型に基づく型
ここでは、戻り値の型は、関数に渡される値の型と同じになります。
1function identity<T>(value: T): T {2 return value;3}これら3つは、最も一般的な型のカテゴリです。これらは、あなたが書くことになる型の大部分を占めるでしょう。
ただし、4番目のカテゴリもあります。
何でもありうる任意の型
ここでは、渡される値は不明な型であり、任意の型である可能性があり、関数はそれでも動作します。
1function getTypeOf(value: mixed): string {2 return typeof value;3}これらの不明な型はあまり一般的ではありませんが、それでも役に立つ場合があります。
これらの値は mixed で表す必要があります。
何でも入り、何も出てこない
mixed は、あらゆる種類の値を受け入れます。文字列、数値、オブジェクト、関数など、何でも機能します。
1function stringify(value: mixed) {2 // ...3}4
5stringify("foo");6stringify(3.14);7stringify(null);8stringify({});mixed 型の値を使用しようとすると、最初に実際の型が何であるかを把握する必要があります。そうでないと、エラーが発生します。
1function stringify(value: mixed) {2 return "" + value; // Error! 3}4
5stringify("foo");2:10-2:19: Cannot use operator `+` with operands string [1] and mixed [2] [unsafe-addition]
代わりに、絞り込むことによって、値が特定の型であることを確認する必要があります。
1function stringify(value: mixed) {2 if (typeof value === 'string') {3 return "" + value; // Works!4 } else {5 return "";6 }7}8
9stringify("foo");typeof value === 'string' チェックにより、Flow は if 文の中で value が string のみになる可能性があることを認識しています。これは、絞り込みと呼ばれます。
any との比較
mixed は安全ですが、any は安全ではありません。どちらもすべての値を受け入れますが、any はすべての操作を安全でない方法で許可します。
empty との比較
mixed は empty の反対です。
- すべては
mixedですが、最初に特定の型に絞り込まなければ、許可される操作はほとんどありません。これは、すべての型のスーパータイプです。 emptyは何もありませんが、あらゆる操作が許可されています。これは、すべての型のサブタイプです。