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%相同的东西