【发布时间】:2021-05-15 13:23:16
【问题描述】:
如您所知,TypeScript 的核心原则之一是类型检查侧重于值的形状,这有时称为duck typing 或structural typing。此外,形状匹配只需要匹配对象字段的子集。
例如,Typescript 完全可以接受以下代码:
interface Point {
x: number;
y: number;
}
function logPoint(p: Point) {
console.log(`${p.x}, ${p.y}`);
}
const rect = { x: 33, y: 3, width: 30, height: 80 };
logPoint(rect); // logs "33, 3"
但是如果你直接用对象字面量调用 logPoint 函数,Typescript 会警告你:
logPoint({ x: 33, y: 3, width: 30, height: 80 }); // error
那么,有什么区别呢?为什么子集类型数学在第一种情况下有效而在第二种情况下无效?
链接:
【问题讨论】:
-
这能回答你的问题吗? How excess property check helps?
-
我不知道为什么会这样。但是,尽管您可能正在使用
rect对象做一些富有成效的事情,但根本没有实际理由使用不是精确类型匹配的文字参数。所以,我猜,要么 TS 试图保护您免受明显错误的影响,要么 TS 开发人员不想做这项工作来支持无用的用例。
标签: typescript