为什么在存在泛型类型时类型推断会中断?

时间:2016-05-19 14:50:35

标签: generics typescript

例如,类型推断在以下代码段中完美运行:

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

编译器正确地将匿名函数中的参数“value”标识为类型“string”,如预期的那样。但是,我注意到,当引入泛型类型时,情况也是如此,如下面的代码段所示:

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

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

1 个答案:

答案 0 :(得分:1)

它没有崩溃。您已将const any => any键入为标识类型。不是lambda。您创建的lambda恰当地是<T>(value: T) => T;。分配后,它将专门用于您正在寻找的类型。

但是,如果检查身份常量,则类型信息实际上是export type identity = <T>(value: T) => T; export const identity: identity = (value) => value; let test:string = identity(4)

{{1}}

当编译器到达最后一行时,它以

失败
  

错误TS2322:键入&#39; number&#39;不能指定为&#39; string&#39;。