TypeScript中如何让泛型类型根据属性类型自动推断泛型参数?
解决方案:通过泛型工厂函数实现自动类型推断
直接写let newFooToo: Foo = ...是行不通的,因为TypeScript的泛型类型别名在作为类型注解时,必须显式传入泛型参数,无法自动从对象字面量中推导T的类型。
要实现你想要的自动推断效果,最常用的方案是定义一个泛型工厂函数,利用TypeScript的泛型参数推断机制来自动推导T:
type Foo<T> = { propertyA: T[], propertyB: number, functionA: (a: T) => void } // 定义泛型工厂函数 function createFoo<T>(foo: Foo<T>): Foo<T> { return foo; } // 使用示例 let fooArray: string[] = ['one','two','three'] // 无需显式声明T,TS会自动从propertyA推断出T为string const newFooToo = createFoo({ propertyA: fooArray, propertyB: 10, functionA: (a) => { console.log(a) // 此处a会被自动推断为string,支持智能提示 } })
这个方案的核心是:当你将对象传递给工厂函数的参数时,TypeScript会根据propertyA的类型自动推导出泛型参数T,同时functionA的参数类型会同步被约束,完美满足你想要的智能提示需求。
内容的提问来源于stack exchange,提问作者hyltonw
相关产品推荐
相关产品推荐

