Typescript类型断言 - 与可选成员的接口

时间:2016-08-01 06:24:19

标签: typescript

为什么带有可选属性的接口与没有接口的接口区别对待?如果没有明确定义可选项,那么所有属性都被认为是类型断言的可选属性吗?

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;

1 个答案:

答案 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