gpt4 book ai didi

typescript - 'object' 、{} 和 TypeScript 中的对象之间的区别

转载 作者:搜寻专家 更新时间:2023-10-30 20:32:00 25 4
gpt4 key购买 nike

试图找出 TypeScript 中这两种类型之间的区别:

foo: 对象

栏:{}

类型:对象 ?


示例:尝试将对象分配给假设处理请求 header 信息的变量:

headers: object;

导致错误:

Type 'object' is not assignable to '{ [key: string]: string }`.

如果使用 headers:{},同样的条件通过,这导致 {} 的要求稍微宽松一些。

最佳答案

TypeScript 具有三种容易混淆的类型:Object{}object

如果禁用了 strictNullChecks 编译器选项,则可以将 nullundefined 分配给所有三种类型,否则会发生编译错误。

对象

包含存在于所有 JavaScript 对象中的内容(如 toString()hasOwnProperty())。可以将任何值(原始值、非原始值)分配给 Object 类型。

{}

{} 是一个空对象。它在运行时与 Object 几乎相同,但在编译时有所不同。在编译时 {} 没有 Object 的成员并且 Object 有更严格的行为(参见@golmschenk 的评论)。

对象

对象 was introduced in TypeScript 2.2 .它是任何非原始类型。您不能为其分配任何原始类型,例如 boolnumberstringsymbol

因此,如果您要尝试这样做:

var strictTypeHeaders: { [key: string]: string } = {}; // non-primitive type
var header: object = {};
header = strictTypeHeaders; // its OK
strictTypeHeaders = header; // causes error "Type 'object' is not assignable to type '{ [key: string]: string }`"

你会在最后一行得到编译错误。发生这种情况是因为 { [key: string]: string } 类型比 object 类型更具体。 header = strictTypeHeaders 没有任何错误,因为这两种类型都是非原始类型并且 object 是比 { [key: string]: string } 更常见的类型

关于typescript - 'object' 、{} 和 TypeScript 中的对象之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com