【发布时间】:2016-08-07 17:59:40
【问题描述】:
为什么以下断言有效:
interface AllRequired {
a: string;
b: string;
}
let all = {a: "foo"} as AllRequired; // No error
但是这个断言给出了一个错误:
interface SomeOptional {
a?: string;
b: string;
}
let some = {a: "foo"} as SomeOptional; // Error: Property 'b' missing
我能看到的唯一区别是将接口属性之一设为可选 (?)。似乎如果所有属性都不是可选的,我可以向接口断言部分对象,但是一旦任何接口属性是可选的,我就不能再断言部分对象了。这对我来说真的没有意义,我一直无法找到这种行为的解释。这是怎么回事?
对于上下文:我 encountered this behavior 在尝试解决 React 的 setState() 采用部分状态对象的问题时,但 TypeScript doesn't yet have partial types 使其与您的状态接口正常工作。作为一种解决方法,我想出了setState({a: "a"} as MyState) 并发现只要接口MyState 字段是all 非可选的,但只要一些 属性就会失败可选的。 (将所有属性设为可选是一种解决方法,但在我的情况下非常不可取。)
【问题讨论】:
-
说实话,我认为 stackoverflow 上只有一个人能够回答这个问题,那就是 @RyanCavanaugh(希望这会召唤他)。否则 TypeScript github 页面上可能会出现问题。
标签: reactjs typescript