空
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'に変更した場合)、xはdefaultでemptyではなくなり、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コマンドを使用できます。