如何判断TypeScript类型是否为字面量类型?
如何编写TypeScript工具类型判断是否为字面量类型
可以利用TypeScript的类型拓宽特性实现这个工具类型。字面量类型(如'abc'、false、42)是对应原始类型(string、boolean、number)的子类型,而原始类型无法被字面量类型约束。基于这一点,我们可以通过条件类型区分二者:
type IsLiteral<T> = T extends string ? (string extends T ? false : true) : T extends boolean ? (boolean extends T ? false : true) : T extends number ? (number extends T ? false : true) : false;
验证示例
// 原始类型返回false type IsStringALiteral = IsLiteral<string> // false type IsBooleanALiteral = IsLiteral<boolean> // false type IsNumberALiteral = IsLiteral<number> // false // 字面量类型返回true type IsStringLiteralALiteral = IsLiteral<'abc'> // true type IsBooleanLiteralALiteral = IsLiteral<false> // true type IsNumberLiteralALiteral = IsLiteral<42> // true
原理说明
- 当
T是原始类型(如string)时,string extends T成立,因此返回false - 当
T是字面量类型(如'abc')时,string extends 'abc'不成立,因此返回true - 对于不属于字符串、布尔、数字范畴的类型,直接返回
false
内容的提问来源于stack exchange,提问作者Wayne Maurer
相关产品推荐
相关产品推荐

