2016-05-19 52 views
0

例如,类型推断完美地工作在下面的代码段:当泛型类型存在时,为什么类型推断会崩溃?

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

编译器正确地识别在作为预期的匿名函数类型“字符串”变量“值”。不过,我注意到,当一个泛型类型被引入作为在下面的代码片段同样是不正确的:

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

如果我删除从函数定义的类型注释,则编译器假定参数“值”当我期望它解析一个“T”类型时有一个“任何”类型。我希望能够从函数定义中移除类型注释,并将它们写在函数的上方以便代码清晰。在TypeScript中使用泛型时可以这样做吗?

回答

1

它不分解。您已将“常量”identity键入为身份类型。不是lambda。您创建的lambda适当地为any => any。一旦你分配它,它就变得专门针对你正在寻找的类型。

但是,如果检查身份不变类型的信息实际上是在<T>(value: T) => T;

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

let test:string = identity(4) 

当编译器到达它失败

错误TS2322的最后一行:类型“号”不能分配给'string'类型。

+0

好吧,我会被诅咒的,没有想到要尝试。似乎工作,谢谢! – patrickjtoy