メインコンテンツに移動

emptyには値がありません。これは他のすべての型のサブタイプ(つまりボトムタイプ)です。そう考えると、Mixedの反対で、それはすべての型のスーパータイプです。

emptyを使用してコードに注釈を付けるのは一般的ではありません。ただし、それが役立つ可能性のある2, 3の状況があります。

常にエラーを発生させる関数がある場合、関数が決して返さないため、戻り値にemptyと注釈を付けます。

1function throwIt(msg: string): empty {2  throw new Error(msg);3}

emptyにキャストを使用して、ユニオンのすべてのメンバーを絞り込んだことをアサートできます。

1function f(x: 'a' | 'b'): number {2  switch (x) {3    case 'a':4      return 1;5    case 'b':6      return 2;7    default:8      return (x: empty);9  }10}

ユニオンのすべてのメンバーをチェックしなかった場合(たとえば、x'a' | 'b' | 'c'に変更した場合)、xdefaultemptyではなくなり、Flowでエラーが発生します。

注: emptyにキャストすることなく、既定で徹底的にチェックされた列挙型が必要な場合は、プロジェクトでフロー列挙型を有効にして使用できます。

emptyはすべての型のサブタイプであるため、empty型の何かでは、すべての操作が許可されます。ただし、emptyになれる値がないため、anyとは異なり、「安全」です。

1const str = "hello";2
3if (typeof str === "string") {4  (str: string); // Yes it's a string5} else {6  // Works! Since we will never enter this branch7  (str: empty);8  const n: number = str + 1;9}

コードの型安全性の欠陥やフロー自体のバグのために、emptyの型指定された値を取得することが可能なので、上記に「safe」を引用符で囲みました。

emptyとして型指定されたコードを特定するには、coverageコマンドを使用できます。