Typescript 我可以创建两个不同的类/接口,除以属性值吗?

Typescript 我可以创建两个不同的类/接口,除以属性值吗?,typescript,Typescript,我有一个选择类(或者可以是一个接口,我不在乎) 选择类可以具有覆盖范围属性和'all'|'selected' 如果coverage是'selected',则它可以有项值,这是一个数组 我希望它不能有项目,如果它的覆盖范围是'all' 对于代码示例,我希望: const allSelected:Selected={ 覆盖范围:“全部”, }; allSelected.items=[];//我希望这会发出错误,因为它试图访问'items'。 仅常量已选择:已选择={ converage:'selec

我有一个
选择
类(或者可以是一个接口,我不在乎)

选择
类可以具有
覆盖范围
属性和
'all'|'selected'

如果
coverage
'selected'
,则它可以有
值,这是一个数组

我希望它不能有
项目
,如果它的
覆盖范围
'all'

对于代码示例,我希望:
const allSelected:Selected={
覆盖范围:“全部”,
};
allSelected.items=[];//我希望这会发出错误,因为它试图访问'items'。
仅常量已选择:已选择={
converage:'selected',//我希望这会发出错误,因为它没有'items'。
}
这是可以定义的
选择
类吗?

您可以使用
类型
执行此操作:

type Selected = {
    coverage: "selected",
    items: string[]
} | {
    coverage: "all"
};
所有示例代码都将在您期望的地方发出错误

为了访问项目,您需要确保
覆盖率==“已选定”
,例如:

function test(selection: Selected) {
   // selection.items; // ERROR, might not have an `items` prop
   if(selection.coverage === "selected") {
       console.log(selection.coverage); // OK
   }
}
使用
接口
关键字无法做到这一点,但是
类型
接口
无论如何都是99%相同的东西