Typescript如何从模块导出对象的值中推导联合类型
TypeScript 获取模块所有导出值类型联合的方案
直接通过索引访问类型即可实现需求,无需手动枚举导出项:
实现代码
在你的导入文件中按如下方式定义类型即可:
import * as things from './myModule'; // 所有导出值的联合类型 type AnyThing = typeof things[keyof typeof things]; function useThings(thing: AnyThing) { // 业务逻辑正常使用即可 }
原理解释
typeof things会拿到整个导入模块的类型结构,所有导出项都会作为该对象类型的属性存在keyof typeof things是所有导出项的键名组成的联合类型- TypeScript 索引访问语法
T[K]当K为联合类型时,会自动返回所有对应属性值的类型的联合,刚好满足你要的所有导出值类型拼接的效果
如果你需要单独用到键的联合类型,也可以拆分定义:
type AnyThingKey = keyof typeof things; type AnyThing = typeof things[AnyThingKey];
内容的提问来源于stack exchange,提问作者ebbishop
相关产品推荐
相关产品推荐

