我怎么说我希望一个接口是一个或另一个,而不是两个或两个都不是?

interface IFoo {
    bar: string /*^XOR^*/ can: number;
}

推荐答案

可以将联合类型与never类型一起使用,以实现以下目的:

type IFoo = {
  bar: string; can?: never
} | {
  bar?: never; can: number
};


let val0: IFoo = { bar: "hello" } // OK only bar
let val1: IFoo = { can: 22 } // OK only can
let val2: IFoo = { bar: "hello",  can: 22 } // Error foo and can
let val3: IFoo = {  } // Error neither foo or can

Typescript相关问答推荐

使用FormArray在Angular中添加排序

TypScript如何在 struct 上定义基元类型?

如何使类型只能有来自另一个类型的键,但键可以有一个新值,新键应该抛出一个错误

在泛型类型中对子代执行递归时出错

如何为父类构造函数中的修饰属性赋值?

带占位符的模板文字类型何时扩展另一个?

诡异的文字类型--S为物语的关键

如何通过TypeScrip中的函数防止映射类型中未能通过复杂推理的any值

将具有Readonly数组属性的对象接口转换为数组

自定义 Select 组件的类型问题:使用带逗号的泛型类型<;T与不带逗号的<;T&>;时出错

如何在Angular 服务中制作同步方法?

try 使Angular依赖注入工作

带投掷的收窄类型

错误:NG02200:找不到类型为';对象';的其他支持对象';[对象对象]';.例如数组

回调函数中的TypeScrip类型保护返回Incorect类型保护(具有其他未定义类型的返回保护类型)

创建一个TypeScrip对象并基于来自输入对象的约束定义其类型

Route.ts文件中未导出HTTP方法

如何根据Typescript 中带有泛型的对象嵌套键数组获取数组或对象的正确类型?

元组解释

递归地排除/省略两种类型之间的公共属性