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

如何在仅知晓对象中一个键的情况下定义其类型

TypeScript 定义含已知键类型的任意对象

你可以通过交叉类型或者索引签名+明确属性两种方式实现需求,既固定已知键的类型,又允许其他任意未知键(值类型为any)。

方法一:交叉类型(推荐)

把明确的键类型和Record<string, any>交叉,兼顾类型约束和灵活性:

type MyObject = {
  c: { d: string };
} & Record<string, any>;

验证示例

// 合法对象:c的类型符合要求,其他键任意
const validObj: MyObject = {
  a: 123,
  b: "hello",
  c: { d: "world" }
};

// 类型错误:c.d必须是字符串
const invalidObj: MyObject = {
  c: { d: 123 } // 报错:Type 'number' is not assignable to type 'string'
};

// 支持新增任意其他键
const extendedObj: MyObject = {
  c: { d: "test" },
  isActive: true,
  callback: () => console.log("hi")
};

方法二:索引签名+明确属性

直接在类型里声明已知键,同时添加字符串索引签名允许其他任意键:

type MyObject = {
  c: { d: string };
  [key: string]: any;
};

这种写法和交叉类型效果一致,但要注意:如果明确属性的类型和索引签名的类型冲突(比如索引签名是number但明确属性是string),会触发类型错误。这里c的类型是对象,和any兼容,所以没问题。

两种方法都能满足你的需求——既约束c的类型为{d: string},又允许对象包含任意其他未知键,值类型为any。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:15:01