如何创建带可选属性且支持任意额外属性的TypeScript泛型类型?
解决方案
要让stuff数组的元素既保留optionalStuff可选属性,又能接受任意其他属性,你可以在对象类型中添加字符串索引签名,具体写法如下:
interface SomeProps { stuff: { optionalStuff?: object[]; // 允许任意字符串键的额外属性,值类型设为unknown(比any更安全) [key: string]: unknown; }[]; }
说明
- 索引签名
[key: string]: unknown表示该对象可以包含任意数量的字符串类型键,对应的值类型为unknown(你也可以根据需求换成string | number | object | undefined等更贴合场景的联合类型)。 - 这个写法能兼容已定义的
optionalStuff属性,因为unknown类型包含了object[] | undefined的类型范围。 - 如果需要允许数值类型的键,不用额外声明——TypeScript会自动将对象的数值键转换为字符串键处理,所以字符串索引签名已经覆盖这种情况。
内容的提问来源于stack exchange,提问作者pmpc
相关产品推荐
相关产品推荐

