假设我们有以下类型脚本interface:

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

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

推荐答案

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

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

在本例中,类型别名是您描述的两种类型中的union.因此,Sample应该是第一个成分(其中key1为真,key3为必填项)或第二个成分(其中key1为假,key3不存在).

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

希望有帮助.祝你好运

Typescript相关问答推荐

如何根据服务响应构建子路由

为什么在TypScript中将类型守护的返回类型写成This is(

如何从具有给定键列表的对象类型的联合中构造类型

使用前的组件渲染状态更新

为什么ESLint抱怨通用对象类型?

如何在第一次加载组件时加载ref数组

TypeScript:在作为参数传递给另一个函数的记录中对函数的参数实现类型约束

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

如何将TS泛型用于react-hook-form接口?

编译TypeScrip项目的一部分导致错误

如何从一个泛型类型推断多个类型

类型与泛型抽象类中的类型不可比较

NPM使用Vite Reaction应用程序运行预览有效,但我无法将其部署到Netlify

map 未显示控制台未显示任何错误@reaction-google-map/api

如何正确地将元组表格输入到对象数组实用函数(如ZIP)中,避免在TypeScrip 5.2.2中合并所有值

Rxjs将省略的可观测对象合并到一个数组中

为什么过滤器不改变可能的类型?

传入类型参数<;T>;变容函数

如何在TypeScript中声明逆变函数成员?

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