【问题标题】: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 }) =&gt; { })不是错误,因为monkey是变量名,不是类型名。)

标签: typescript typescript-generics


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2016-11-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多