You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何获取接口内所有允许类型的联合类型

TypeScript获取接口所有属性类型联合的方法

完全可以实现,直接用TypeScript的索引访问类型就行,写法和取键名联合的keyof对应,格式为你的接口名[keyof 你的接口名]。

拿你举的Events接口举例:

interface Events {
    connect: () => void;
    message: (data: object) => void;
}

// 取所有属性值类型组成的联合
type EventValueTypes = Events[keyof Events];
// 得到的类型就是你要的:(() => void) | ((data: object) => void)

原理说明

keyof Events本身会返回键名的联合类型"connect" | "message",当联合类型被用作索引访问的参数时,TypeScript会自动遍历联合里的每一个键,取出对应位置的属性类型,最后把所有取出的类型重新合并成联合类型返回,刚好就是接口内所有定义的属性类型的集合。

可选属性的特殊情况

如果接口里有可选属性,最终返回的联合类型会自动带上undefined:

interface Test {
    name: string;
    age?: number;
}
type TestValues = Test[keyof Test];
// 结果是 string | number | undefined

如果要过滤掉undefined,可以配合内置的NonNullable工具类型使用:

type ValidTestValues = NonNullable<Test[keyof Test]>;
// 结果为 string | number

内容的提问来源于stack exchange,提问作者echus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:27:18