本系列做爲《TypeScript 入門實戰筆記》課程(見拉勾教育)的補丁,隨時更新。typescript
如課程第 9 講所說,枚舉是 TypeScript 裏極其雞肋的特性,由於枚舉類型基本上是僅和自身類型兼容。markdown
但我猜想外部枚舉(Ambient Enums)——一種定義其餘地方定義過的枚舉類型,應該是能夠解決(」繞過「)枚舉僅和自身兼容的問題。函數
但 TypeScript 官方文檔裏除了介紹外部枚舉特性以外(一是未指定初始值的外部枚舉成員一概當作計算(值)成員,二則是轉譯成 JavaScript時會擦除外部枚舉定義),竟然都沒有一個靠譜的例子說明這玩意兒究竟有什麼用或者說怎麼用。但結合其轉譯時被擦除的特性,大機率只能在類型定義文件 .d.ts 裏使用(由於如擦出了 .ts 模塊裏定義的外部枚舉,運行時能夠就找不到枚舉值了)。oop
舉個示例:ui
首先定義 types.d.ts:spa
declare enum A {
A = "A",
B = "B"
}
export type CmpA = (ele: A) => boolean;
export {};
複製代碼
而後定義 business.ts:code
import { CmpA } from "./types";
enum A {
A = "A",
B = "B"
}
// C1: 枚舉類型兼容了
const c: CmpA = (ele: A) => {
switch (ele) {
case A.A:
return true;
default:
return false;
}
};
export {};
複製代碼
如 business.ts C1 註釋處所示:用到枚舉 A 的匿名箭頭函數能夠賦值給類型是 CmpA 的變量 c,便是說外部枚舉和枚舉 A 是兼容的。因此這就是我所理解的外部枚舉的做用和用法。orm