繁体   English   中英

错误TS2345:类型'T'的参数不能分配给'object'类型的参数

[英]error TS2345: Argument of type 'T' is not assignable to parameter of type 'object'

下面的代码适用于TypeScript 2.1.6:

function create<T>(prototype: T, pojo: Object): T {
    // ...
    return Object.create(prototype, descriptors) as T;
}

更新到TypeScript 2.2.1后,我收到以下错误:

错误TS2345:类型'T'的参数不能分配给'object'类型的参数。

更改函数的签名,使泛型类型T扩展类型object ,在Typescript 2.2中引入。 使用此语法 - <T extends object>

function create<T extends object>(prototype: T, pojo: Object): T {
    ...
    return Object.create(prototype, descriptors) as T;
}

Object.create的签名在TypeScript 2.2中已更改。

在TypeScript 2.2之前, Object.create的类型定义是:

create(o: any, properties: PropertyDescriptorMap): any;

但正如您所指出的, TypeScript 2.2引入object类型:

TypeScript没有表示非基本类型的类型,即任何不是number东西 string | boolean | symbol | null | undefined 输入新的对象类型。

使用对象类型,可以更好地表示Object.create等API。

Object.create的类型定义已更改为:

create(o: object, properties: PropertyDescriptorMap): any;

所以通用类型T在你的例子是不能分配给object ,除非编译器被告知T扩展object

在2.2版之前,编译器不会捕获这样的错误:

Object.create(1, {});

现在编译器会抱怨:

类型“1”的参数不能分配给“对象”类型的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM