【发布时间】:2020-06-15 21:50:47
【问题描述】:
关于 TypeScript {} 类型的问题 - 到目前为止,我认为它的意思是“没有属性的空对象”类型,但最近我偶然发现了禁止使用 {} 类型的 eslint 规则,因为它表示“任何非空值” .打字稿游乐场的快速测试表明这是真的:
let d: {} = {};
d = false;
这段代码没有给出编译器错误,但是当我尝试将null 分配给d 时,确实有错误。所以我的问题是:
TypeScript 中的
{}类型实际上是什么?它真的代表“任何非空值”(在 TypeScript 文档中找不到确认)吗?我应该如何实际键入“没有任何属性的空对象”?
【问题讨论】:
-
在此处查看此答案 stackoverflow.com/a/36969975/13058340 -“类型对象 {} 表示 0 字段对象。此类型的唯一合法值是空对象:{}。”
-
@PedroFilipe 虽然这似乎回答了这个问题,而且是一个不错的发现,但它并没有解释为什么代码示例编译时没有错误。
-
当您将 d 重新分配为 false 时,这是一个有效的操作,因为
let允许您这样做。您实际上是在说 - 使对这个空对象的引用消失并用错误值替换它 -
我不明白,我明确告诉编译器 d 是 {} 类型,所以它不应该让我分配布尔值。请注意,分配 null 会导致编译器错误。
-
@PedroFilipe 事实并非如此,如果你反其道而行之,那就不行了:
let d: boolean = false; d = {};。这将给出一个编译器错误。
标签: typescript