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

如何定义TypeScript接口属性名组成的数组类型?

解决方法

你需要用keyof操作符提取Details接口的属性名联合类型,再定义对应的数组类型,具体写法如下:

type RequiredFields = (keyof Details)[];

为什么之前的代码报错?

你写的{ [key in Details]?: string }是错误的——索引签名的key必须是string | number | symbol类型,而你直接用了整个Details接口类型,TypeScript自然会抛出类型不匹配的错误。keyof Details才会返回Details所有属性名的联合类型:"id" | "groups" | "name" | "total" | "open" | "debug" | "demo" | "registered",把这个联合类型作为数组元素类型,就完全符合你要的“任意属性名组成的数组”需求。

验证示例

下面的赋值都是合法的:

const fields1: RequiredFields = ['total', 'open', 'demo']; // 符合要求
const fields2: RequiredFields = ['id', 'name', 'registered']; // 同样合法

如果不小心写入接口外的属性名,TypeScript会直接报错拦截:

const invalidFields: RequiredFields = ['total', 'invalidKey']; // 报错:"invalidKey"不在keyof Details的范围内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:15:30