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

Any

警告: anymixed と間違えないでください。また、empty とも異なります。

型チェッカーを使わずに済む方法を探している場合、any がその方法です。any の使用は完全に安全ではなく、可能な限り避けるべきです。

たとえば、次のコードはエラーを報告しません

1function add(one: any, two: any): number {2  return one + two;3}4
5add(1, 2);     // Works.6add("1", "2"); // Works.7add({}, []);   // Works.

実行時エラーが発生するコードでさえ、Flow によって検出されません

1function getNestedProperty(obj: any) {2  return obj.foo.bar.baz;3}4
5getNestedProperty({});

any の使用を検討するシナリオはほんのわずかです

  1. 既存のコードを Flow 型に変換中で、現在コードが型チェックされているときにブロックされている場合 (他のコードを最初に変換する必要がある場合があります)。
  2. コードが機能しており、何らかの理由で Flow が正しく型チェックできないことを確信している場合。JavaScript には、Flow が静的に型付けできない慣用句が多数あります (ただし減少しています)。

unclear-type リン​​トルールを有効にすることで、any を禁止できます。

coverage コマンドを使用して、any として型付けされたコードを特定できます。

any を漏らさない

any 型の値があると、実行したすべての操作の結果に対して Flow が any を推論する可能性があります。

たとえば、any 型のオブジェクトのプロパティを取得すると、結果の値も any 型になります。

1function fn(obj: any) {2  let foo = obj.foo; // Results in `any` type3}

その後、数値であるかのように追加するなど、別の操作で結果の値を使用でき、その結果も any になります。

1function fn(obj: any) {2  let foo = obj.foo; // Results in `any` type3  let bar = foo * 2; // Results in `any` type4}

any がコード全体に漏れるまで、このプロセスを続けることができます。

1function fn(obj: any) {2  let foo = obj.foo;3  let bar = foo * 2;4  return bar; // Results in `any` type5}6
7let bar = fn({ foo: 2 }); // Results in `any` type8let baz = "baz:" + bar; // Results in `any` type

できるだけ早く別の型にキャストすることで any を切り離すことで、この問題を防ぎます。

1function fn(obj: any) {2  let foo: number = obj.foo;3}

これでコードから any が漏れることはありません。