Nen*_*nad 9 typescript typescript2.2
代码bellow与Typescript 2.1.6一起正常工作
function create<T>(prototype: T, pojo: Object): T {
// ...
return Object.create(prototype, descriptors) as T;
}
Run Code Online (Sandbox Code Playgroud)
更新到Typescript 2.2.1后,我收到以下错误:
错误TS2345:类型'T'的参数不能分配给'object'类型的参数.
Nen*_*nad 11
更改函数的签名,以便在Typescript 2.2中引入泛型类型T扩展类型object.使用此语法 - <T extends object>:
function create<T extends object>(prototype: T, pojo: Object): T {
...
return Object.create(prototype, descriptors) as T;
}
Run Code Online (Sandbox Code Playgroud)
的签名Object.create已在TypeScript 2.2中更改。
在TypeScript 2.2之前,其类型定义为Object.create:
create(o: any, properties: PropertyDescriptorMap): any;
Run Code Online (Sandbox Code Playgroud)
但正如您指出的那样,TypeScript 2.2引入了该object类型:
TypeScript没有代表非基本类型的类型,即不是
number|string|boolean|symbol|null|undefined。输入新的对象类型。使用对象类型,可以更好地表示Object.create之类的API。
的类型定义Object.create已更改为:
create(o: object, properties: PropertyDescriptorMap): any;
Run Code Online (Sandbox Code Playgroud)
因此T,object除非告知编译器T扩展,否则示例中的泛型类型不能分配给该类型object。
在2.2版之前,编译器不会捕获如下错误:
Object.create(1, {});
Run Code Online (Sandbox Code Playgroud)
现在编译器会抱怨:
类型“ 1”的参数不能分配给类型“对象”的参数。
| 归档时间: |
|
| 查看次数: |
33162 次 |
| 最近记录: |