如何在仅知晓对象中一个键的情况下定义其类型
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
相关产品推荐
相关产品推荐

