メインコンテンツにスキップ

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 文の中で valuestring のみになる可能性があることを認識しています。これは、絞り込みと呼ばれます。

any との比較

mixed は安全ですが、any は安全ではありません。どちらもすべての値を受け入れますが、any はすべての操作を安全でない方法で許可します。

empty との比較

mixedempty の反対です。

  • すべては mixed ですが、最初に特定の型に絞り込まなければ、許可される操作はほとんどありません。これは、すべての型のスーパータイプです。
  • empty は何もありませんが、あらゆる操作が許可されています。これは、すべての型のサブタイプです。