TypeScript:如何为A.prop2指定仅允许枚举X本身赋值的类型?
TypeScript枚举对象类型赋值问题解答
问题描述
现有如下TypeScript代码:
enum X { A = 'x', B = 'y' } type A<T> = { prop1: T prop2: ? } let r:A<X> = { prop1: X.A, prop2: X }
需要为A.prop2指定什么类型,才能仅允许枚举X本身赋值给它?(要求不使用any等取巧方式)
解决方案
将prop2的类型指定为typeof X即可,修改后的完整代码如下:
enum X { A = 'x', B = 'y' } type A<T> = { prop1: T prop2: typeof X } let r:A<X> = { prop1: X.A, prop2: X // 类型匹配,无报错 }
原理说明
在TypeScript中:
X代表枚举成员的联合类型(此处为X.A | X.B),对应枚举成员的值类型;typeof X代表枚举对象本身的类型,描述了包含所有枚举成员的那个对象的结构。
通过将prop2的类型设为typeof X,就严格限定了它只能接收X这个枚举对象,而非枚举成员的值。
内容的提问来源于stack exchange,提问作者asgerhallas
相关产品推荐
相关产品推荐

