如何在TypeScript中判断字符串是否属于指定联合类型
TypeScript判断字符串是否属于指定联合类型的实现方法
TypeScript的类型仅存在于编译阶段,运行时会被完全擦除,因此无法直接在运行时判断值是否属于某个TS类型。你可以通过「先定义运行时常量集合、再从集合推导类型」的方式实现需求,具体实现如下:
实现步骤
- 第一步:定义运行时可用的合法取值数组,同时从数组推导对应TS类型,避免重复写两遍取值逻辑
// 运行时真实存在的常量数组,用as const锁定数组元素为字面量类型 const FRUITS = ['Apple', 'Banana', 'Orange'] as const; // 从数组推导得到等价的联合类型 type Fruit = typeof FRUITS[number];
- 第二步:封装类型守卫函数,同时完成运行时校验和TS类型收窄
function isFruit(value: unknown): value is Fruit { // 先判断是字符串类型,再判断是否在合法取值数组内 return typeof value === 'string' && FRUITS.includes(value as Fruit); }
- 第三步:在业务逻辑中直接调用类型守卫函数即可
const myFruit = 'Banana'; if (isFruit(myFruit)) { // 进入此分支时TS会自动将myFruit的类型收窄为Fruit console.log('myFruit is a fruit!'); }
补充说明
如果你不想额外封装类型守卫,也可以直接在判断条件里写FRUITS.includes(myFruit as Fruit),但封装成守卫函数复用性更高,也不用每次都写类型断言。
内容的提问来源于stack exchange,提问作者Z0q
相关产品推荐
相关产品推荐

