🔎 搜索词
已知属性满足,子类型
🕗 版本与回归信息
- 在我尝试的每个版本中,这种行为都是如此,我还查阅了关于已知属性检查的FAQ条目
⏯ Playground链接
https://www.typescriptlang.org/play/?ts=5.6.0-dev.20240723#code/JYOwLgpgTgZghgYwgAgILIN4Chm+TAewIC5kQBXAWwCNoBuLAXyy1ElkRQCFkIAPSCAAmAZzSYceanCikRYKKADmDZlgA2EMMgLUAVqVQMsuvcgC8mQiWQAmADTJps5ACIlUCAE9XjZCLgwYBEYYAgxLjogA
💻 代码
interface A {
foo: number;
}
interface B extends A {
bar: string;
}
let obj: A;
obj = {foo: 2, bar: "grey"} satisfies B;
🙁 实际行为
抛出错误:
Object literal may only specify known properties, and 'bar' does not exist in type 'A'.
🙂 预期行为
该属性应该被允许,因为我在 satisfies
中指定了类型,并且它是变量类型的子类型
关于问题的附加信息
- 无响应*
3条答案
按热度按时间sqyvllje1#
这当然违背了直觉,但我从未见过任何东西表明
satisfies
检查会导致多余的属性检查被省略。向字面量添加类型Assert可以避免except属性检查。
bttbmeg02#
在这种情况下,这个对象字面量会触发两次额外的属性检查(:
tpxzln5u3#
根据
satisfies
的设计,它正尽最大努力保持一致性,就好像你单独写了我们实际上没有一个类型操作对应于这里所请求的内容——一旦对象字面量“unfreshened”,其他操作就会开始失败(例如字面量缩小)。