You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何TypeScript允许含属性的Person类型赋值给空对象类型{}?

TypeScript中{}类型的赋值逻辑解析

先看你给出的代码:

interface Person { name: string };

let person : Person = { name: "John Smith" };

let empt: {} = person;

你对{}类型的理解有误——它不是“完全没有属性的空对象类型”,而是代表一个只要是对象(非原始类型)就符合要求的类型。

TypeScript采用结构子类型系统,核心逻辑是:如果A类型的结构能满足B类型的所有要求,A就能赋值给B。{}类型的要求极低,只要是对象(不是string、number、boolean这类原始值)就行,对象上有没有额外属性根本不影响赋值的合法性。

Person类型的实例是标准对象,完全满足{}类型的最低要求,所以这种赋值是被允许的。

你可以试试访问empt.name,TypeScript会报错,因为{}类型并没有声明name属性,但这和赋值逻辑不冲突——赋值只看源类型是否满足目标类型的基础要求,不限制它拥有额外属性。

内容的提问来源于stack exchange,提问作者lch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 22:37:37