为什么带有可选属性的接口与没有接口的接口区别对待?如果没有明确定义可选项,那么所有属性都被认为是类型断言的可选属性吗?
interface WithOptionalProperty {
requiredProperty: string;
optionalProperty?: string;
}
//compilation error 'requiredProperty' is missing
let a = { optionalProperty: '' } as WithOptionalProperty;
interface WithoutOptionalProperties {
requiredProperty: string;
anotherRequiredProperty: string;
}
//but this works as expected
let b = { anotherRequiredProperty: '' } as WithoutOptionalProperties;
答案 0 :(得分:1)
这是因为如果A可分配给B或B可分配给A(简化说明),则类型A和B之间的类型断言成功。
在你的情况下,这两个条件都不是真的1.但是在案例B中其中一个是正确的(因此断言编译得很好)。
https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html
双断言:https://basarat.gitbooks.io/typescript/content/docs/types/type-assertion.html#double-assertion