本系列做为《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