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

TypeScript如何定义含固定属性同时支持任意字符串键的对象类型?

问题根源

你原有写法的问题在于,交叉类型中any会覆盖已知属性的类型——任意类型与any交叉后的结果都是any,因此name和count的定义被擦除了。


方案1:使用unknown作为索引签名返回类型(推荐,更安全)

直接在类型定义中声明索引签名,返回值设为unknown即可,不会覆盖已知属性的类型:

interface MyType {
  name: string;
  count: number;
  [key: string]: unknown;
}

该写法下:

  • name固定为string类型、count固定为number类型,类型校验完全正常
  • 访问未定义的其他属性时,类型为unknown,你可以根据业务逻辑自行做类型收窄,避免any带来的类型安全问题

方案2:如果必须保留未知属性为any类型

可以通过Omit排除已知属性的键,避免any覆盖已知类型:

interface Base {
  name: string;
  count: number;
}
// 从任意属性的Record中排除已知的name、count键,再和基础类型交叉
type MyType = Base & Omit<Record<string, any>, keyof Base>;

该写法下已知属性的类型不会被any覆盖,同时未知属性的类型仍为any,适合需要兼容旧代码、不需要严格类型校验的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:45:01