假设我们有以下Typescript interface:

interface Sample {
    key1: boolean;
    key2?: string;
    key3?: number;
};
在这种情况下,始终需要key1key2始终是可选的,而如果key1true,则key3应该存在;如果key1false,则key3应该不存在。换句话说,一个键的出现取决于另一个键的值。我们如何在Typescript中实现呢?

最佳答案

最简单的表示方法是type alias而不是接口(interface):

type Sample = {
  key1: true,
  key2?: string,
  key3: number
} | {
  key1: false,
  key2?: string,
  key3?: never
}

在这种情况下,类型别名是您要描述的两种类型的union。因此,Sample应该是第一个组成部分(其中key1为true且需要key3)或第二个组成部分(其中key1为false且不存在key3)。

类型别名类似于接口(interface),但它们不能完全互换。如果使用类型别名导致某种错误,请在问题中添加有关您的用例的更多详细信息。

希望能有所帮助。祝你好运!

09-17 09:10