如何为inferType函数定义类型以推断任意嵌套对象的类型?
解决TypeScript嵌套对象类型推断问题
要让inferType函数完整保留输入对象的嵌套类型信息,只需要让泛型直接捕获输入的完整类型即可,不用手动限制属性类型:
function inferType<T>(obj: T): T { return obj; }
为什么之前的写法不行?
你之前的代码{ [K in keyof T]: unknown }会把泛型T的每个属性都强制转为unknown,导致TypeScript只能识别顶层的键(比如foo和key),但深层的属性类型全部丢失,自然无法提供嵌套属性的自动补全。
使用效果
当你用修改后的函数定义变量o时:
const o = inferType({ foo: { bar: 'bar', count: 5, nested: { lorem: 'ipsum', nested: true, } }, key: 'value' });
TypeScript会自动推断出o的完整类型,和你期望的结构完全一致:
{ foo: { bar: string, count: number, nested: { lorem: string, nested: boolean, } }, key: string, }
此时在编辑器中输入o.foo.nested.时,就能正常自动补全lorem和nested属性。
内容的提问来源于stack exchange,提问作者Tobbe
相关产品推荐
相关产品推荐

