我有一个接口

interface I1 {
 field1: fieldType1;
 ...
 fieldN: fieldTypeN;
}

现在,我需要一个具有相同字段的接口,但其中一些字段(比如前10个)是可选的.

我可以把它写成Omit<I1, field1, ..., field 10> & {field1?: fieldType1 ...},但想知道是否有更简洁的方法来做.

有类似的问题集中在使一个字段可选,这里的关键是这样做的多个(大量)字段.

推荐答案

您可以创建一个实用程序类型如下:

type PartialKeys<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;

这样使用:

type I2 = PartialKeys<I1, 'field1' | 'field2'>

你不能轻易地"说我想要前N个项目",因为TypeScript的类型系统不支持在对象的属性中强制顺序

Typescript相关问答推荐

为什么文字必须硬编码才能在TypScript中工作?

错误:note_modules/@types/note/globals.d.ts:72:13 -错误TS 2403:后续变量声明必须具有相同的类型

如何使用另一个类型的属性中的类型

有没有办法适当缩小类型?

如何在方法中定义TypeScript返回类型,以根据参数化类型推断变量的存在?

如何在TypeScript对象迭代中根据键推断值类型?

node—redis:如何在redis timeSeries上查询argmin?

防止获取发出不需要的请求

Angular 行为:属性类型从SignalFunction更改为布尔

如何使函数接受类型脚本中具有正确类型的链接修饰符数组

如何键入函数以只接受映射到其他一些特定类型的参数类型?

对数组或REST参数中的多个函数的S参数进行类型判断

Angular文件上传到Spring Boot失败,多部分边界拒绝

TypeScrip:从对象中提取和处理特定类型的键

如何在省略一个参数的情况下从函数类型中提取参数类型?

如何避免从引用<;字符串&>到引用<;字符串|未定义&>;的不安全赋值?

任何导航器都未处理有效负载为";params";:{";roomId";:";...";}}的导航操作

Svelte+EsBuild+Deno-未捕获类型错误:无法读取未定义的属性(读取';$$';)

TypeScript是否不知道其他函数内部的类型判断?

根据索引将元组拆分为两个块