跳到主要內容

空值

empty 類型沒有值。它是 所有其他類型的子類型(也就是 底部類型)。因此,它是 mixed 的相反類型,後者是所有類型的父類型。

使用 empty 註解您的程式碼並不常見。但是,在某些情況下,它可能很有用

如果你有一個總是會拋出例外狀況的函式,你可以註解回傳值為 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' 型別),那麼 xdefault 中將不再是 empty,而 Flow 會產生錯誤。

注意:如果你想要預設徹底檢查列舉,而不需要轉型為 empty,你可以在你的專案中啟用並使用 Flow 列舉

由於 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}

我們在上面將「安全」放在引號中,因為由於你的程式碼中的型別安全性漏洞或 Flow 本身的錯誤,有可能會取得型別為 empty 的值。

你可以使用 coverage 指令來識別型別為 empty 的程式碼。