TypeScript如何基于变量值创建自定义类型?
解决方法
要实现你想要的效果,核心是区分TypeScript中值和类型的边界:你不能直接在类型定义里使用值变量n1,但可以通过typeof操作符获取它的类型。另外需要调整n1的声明方式,让TypeScript保留它的字面量类型:
- 将
n1从let改为const声明:let声明的变量会被TypeScript推断为宽泛的number类型,而const声明的字面量值会被推断为具体的字面量类型(比如这里的40)。 - 在
Numbers_2中使用typeof n1代替直接写n1:typeof操作符在类型层面可以获取值的类型,这样就能把n1对应的字面量类型加入联合类型中。
修正后的代码:
const n1 = 40; // 用const保留字面量类型 type Numbers_1 = 10 | 20 | 30 | 40; type Numbers_2 = 10 | 20 | 30 | typeof n1; // 现在等价于Numbers_1 let n2: Numbers_2 = 1230; // 这行会正确报错:Type '1230' is not assignable to type 'Numbers_2'
这样Numbers_2就和Numbers_1功能完全一致,既能接受指定的几个数字,也包含n1对应的40,同时给n2赋值1230时会触发类型错误,符合你的预期。
内容的提问来源于stack exchange,提问作者Terio
相关产品推荐
相关产品推荐

