如何通过TypeScript接口属性获取联合类型并定义变量类型?
当然有可行的实现方法!TypeScript的索引类型查询正好能解决这个需求,不需要手动写死number | string,还能自动适配接口的后续修改。
直接用Inter[keyof Inter]就能获取到接口所有属性值的联合类型,具体代码如下:
interface Inter { a: number; b: string; } // 这里的类型会自动推导为 number | string let variable: Inter[keyof Inter];
简单解释一下原理:
keyof Inter会生成接口所有键名的联合类型,也就是"a" | "b"- 用这个键名联合类型去索引
Inter,就会得到对应属性值的联合类型,也就是Inter["a"] | Inter["b"],最终就是number | string
如果之后你给Inter新增属性(比如c: boolean),variable的类型会自动更新为number | string | boolean,非常灵活。
如果你需要在多个地方复用这个逻辑,还可以自定义一个通用工具类型:
// 通用工具类型:获取对象/接口所有属性值的联合类型 type Values<T> = T[keyof T]; interface Inter { a: number; b: string; } let variable: Values<Inter>; // 同样得到 number | string
这样不管是哪个接口,都能用Values<YourInterface>快速获取属性值的联合类型~
内容的提问来源于stack exchange,提问作者left click
相关产品推荐
相关产品推荐

