【问题标题】:Why does type inference break down when generic types are present?为什么存在泛型类型时类型推断会崩溃?
【发布时间】:2016-09-16 13:09:28
【问题描述】:

例如,类型推断在以下 sn-p 中完美运行:

export type trim = (value: string) => string;
export const trim: trim = value => value.trim();

编译器按预期将匿名函数中的参数“value”正确识别为“string”类型。但是,我注意到在下面的 sn-p 中引入泛型类型时情况并非如此:

export type identity = <T>(value: T) => T;
export const identity: identity = <T>(value: T) => value;

如果我从函数定义中删除类型注释,编译器会假定参数“value”的类型为“any”,而我希望它解析类型为“T”。我希望能够从函数定义中删除类型注释并将它们写在函数上方以使代码清晰。当 TypeScript 中存在泛型时可以这样做吗?

【问题讨论】:

    标签: generics typescript


    【解决方案1】:

    它不会崩溃。您已将 const identity 输入为身份类型。不是 lambda。您创建的 lambda 是 any =&gt; any。一旦您分配它,它就会专门用于您正在寻找的类型。

    但是,如果您检查标识常量,则类型信息实际上是&lt;T&gt;(value: T) =&gt; T;

    export type identity = <T>(value: T) => T;
    export const identity: identity = (value) => value;
    
    let test:string = identity(4)
    

    当编译器到达最后一行时,它会失败

    错误 TS2322:类型“数字”不可分配给类型“字符串”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多