结构化类型系统为何会放行某些多余属性,鲜明性检查的真实边界是什么
简答题中等1021 次浏览
参考答案与解析
# 核心结论
TypeScript 采用结构化类型系统:一个值只要具有目标类型要求的成员,且这些成员的类型兼容,通常就可以赋给目标类型,即使它还包含其他成员。对象字面量的鲜明性检查,也常称为多余属性检查,是发生在特定语法位置上的附加诊断,用来发现拼写错误和意外字段;它并没有把普通对象类型变成“只能包含这些键”的封闭类型。因此,同一个对象字面量直接赋值或直接传参可能报错,先保存到变量再赋给较窄类型却可能通过,这两种行为并不矛盾。
# 底层机制
当新创建的对象字面量直接接受目标类型检查时,编译器不仅验证必需成员,还会检查字面量中是否出现目标类型未声明的属性。例如:
type Options = { col
