typescript 类型Assert重叠有点混乱

cetgtptt  于 2023-02-25  发布在  TypeScript
关注(0)|答案(1)|浏览(147)

考虑以下接口

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

重叠的规则是什么?

nhhxz33t

nhhxz33t1#

如果类型1是从类型2扩展而来的,或者类型2是从类型1扩展而来的,那么typescript将信任你的类型Assert.但是如果两者都不是从另一个扩展而来的,那么很可能是一个错误,所以typescript会提醒你注意.如果你真的很确定,你可以告诉typescript“是的,我真的想这么做”,方法是:{ a: true, c: true } as unknown as myInterface

const varOne = { a: true } as myInterface;

第一个是允许的,因为myInterface扩展了{ a: boolean }

const varTwo = { a: true, b: true, c: true} as myInterface;

第二个是允许的,因为{ a: boolean, b: boolean, c: boolean }扩展了myInterface

const varThree = { a: true, c: true } as myInterface

但是对于第三个,myInterface没有扩展{ a: true, c: true },因为它缺少一个c属性,{ a: true, c: true }没有扩展myInterface,因为它缺少一个b属性。

相关问题