例如,类型推断在以下代码段中完美运行:
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中存在泛型时,这可能会这样做吗?
答案 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;。