从函数回调推断泛型类型参数
Posted
技术标签:
【中文标题】从函数回调推断泛型类型参数【英文标题】:Infer generic type argument from function callback 【发布时间】:2020-03-12 11:56:39 【问题描述】:给定一个函数foo
,在这种情况下,类型参数T
被正确推断为string
:
declare function foo<T>(callback: (bar: T) => void): void
// foo<string>(callback: (bar: string) => void): void
// ---> T is inferred string here
foo((bar: string) => )
但是,以下示例显示 T
被推断为 unknown
。所以我的问题是:为什么类型不能解析为 T
嵌套在回调的对象类型中?
declare function foo2<T>(callback: (bar: a: T ) => void): void
// foo2<unknown>(callback: (bar: a: unknown; ) => void): void
// ---> T is inferred unknown here
foo2(( a: string ) => )
Sample code
【问题讨论】:
对我来说看起来像是一个错字...您不小心使用object destructuring 创建了一个名为string
的局部变量,这不是您想要的。 (注意foo2(( a: monkey ) => )
不是错误,因为monkey
是变量名,不是类型名。)
【参考方案1】:
我想这就是你要找的东西
declare function foo<T>(callback: (bar: T) => void): void
foo((bar: string) => )
declare function foo2<T>(callback: (bar: T) => void): void
foo2((a: a: string ) => )
typescript playground
【讨论】:
以上是关于从函数回调推断泛型类型参数的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin泛型总结 ★ ( 泛型类 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )