javascript - Typescript 接口(interface)可选属性取决于其他属性

标签 javascript typescript

假设我们有以下 Typescript 接口(interface):

interface Sample {
    key1: boolean;
    key2?: string;
    key3?: number;
};

在这种情况下,key1 始终是必需的,key2 始终是可选的,而如果 key1true<,则 key3 应该存在,如果 key1false,则不应存在。换句话说,一个键的出现取决于另一个键的值。我们如何在 Typescript 中实现这一点?

最佳答案

最直接的表示方式是使用 type alias而不是界面:

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

在这种情况下,类型别名是 union你描述的两种类型。所以 Sample 应该是第一个成分(其中 key1 为真且 key3 是必需的)或第二个成分(其中 key1 为假且 key3 不存在)。

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

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

关于javascript - Typescript 接口(interface)可选属性取决于其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412872/

相关文章:

java - org.openqa.selenium.UnhandledAlertException : unexpected alert open

javascript - Node.js 项目的 Typescript 中类的实例函数

Angular 10 DevOps 扩展 Rest Api

javascript - 如何在 typescript 中从 Map 获取所有键?

javascript - JQuery:如何确定Slide事件是向上还是向下?

javascript - 我可以将本地 var 设置为 'this' 以在匿名回调函数中引用它吗?

javascript - 如何防止每日倒计时器在午夜重置?

javascript - 将字符串转换为有效的 json 对象

reactjs - 带有反应 Spring 的 typescript 。类型 'interpolate' 上不存在属性 'number'

javascript - typeScript 安全的 groupBy