【发布时间】: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 }) => { })
【问题讨论】:
-
对我来说看起来像是一个错字...您不小心使用object destructuring 创建了一个名为
string的局部变量,这不是您想要的。 (注意foo2(({ a: monkey }) => { })不是错误,因为monkey是变量名,不是类型名。)
标签: typescript typescript-generics