考虑以下接口
interface myInterface {
a: boolean;
b: boolean;
}
为什么这两个Assert有效
const varOne = { a: true } as myInterface;
const varTwo = { a: true, b: true, c: true} as myInterface;
但不是这个?
const varThree = { a: true, c: true } as myInterface
重叠的规则是什么?
1条答案
按热度按时间nhhxz33t1#
如果类型1是从类型2扩展而来的,或者类型2是从类型1扩展而来的,那么typescript将信任你的类型Assert.但是如果两者都不是从另一个扩展而来的,那么很可能是一个错误,所以typescript会提醒你注意.如果你真的很确定,你可以告诉typescript“是的,我真的想这么做”,方法是:
{ a: true, c: true } as unknown as myInterface
第一个是允许的,因为
myInterface
扩展了{ a: boolean }
第二个是允许的,因为
{ a: boolean, b: boolean, c: boolean }
扩展了myInterface
。但是对于第三个,
myInterface
没有扩展{ a: true, c: true }
,因为它缺少一个c
属性,{ a: true, c: true }
没有扩展myInterface
,因为它缺少一个b
属性。