我们有Partial实用程序类型来使接口的所有字段都是可选的.

例如:

interface A {
 a: string;
 b: string;
 c: string;
}
type A_Optional = Partial<A>

现在,我正在寻找一种内置的实用程序类型,它可以帮助使100个字段成为可选的.

例如,a和b是可选的,而c仍然是必需的.

例如,类似于:

type X = Optionalize<A, 'a', 'b'>
// a?: optional
// b?: optional
// c: required

以下是我到目前为止所取得的成果

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

它不起作用了

并且我希望我可以指定的字段数量不限,例如:

Optionalize<A, 'x', 'y', 'z', ...etc>

推荐答案

您需要使用辅助对象OmitPartialPick创建一个新类型:

type X = Omit<A, 'a' | 'b'> & Partial<Pick<A, 'a' | 'b'>>;

此外,您还可以创建自己的通用实用程序类型,如下所示:

export type Optionalize<T, Union extends keyof T> = Omit<T, Union> & Partial<Pick<T, Union>>;

现在你可以写下:

import { Optionalize } from "./types.ts";
type X = Optionalize<A, "a" | "b">;

When using type X, if the c key is missing, then, you'll get: enter image description here

Here is a video showing usage:. https://www.loom.com/share/18a6b6323bfd472caf3fd1d702e49d61.

Javascript相关问答推荐

Math.random超出了最大调用堆栈

如何解决(不忽略)reaction详尽的linter规则,而不会在获取数据时导致无限的reender循环

JavaScript:循环访问不断变化的数组中的元素

如何让\w token 在此RegEx中表现得不贪婪?

React对话框模式在用户单击预期按钮之前出现

如何在JavaScript中在文本内容中添加新行

微软Edge Select 间隙鼠标退出问题

我试图实现用户验证的reduxstore 和操作中出了什么问题?

当在select中 Select 选项时,我必须禁用不匹配的 Select

当试图显示小部件时,使用者会出现JavaScript错误.

在open shadow—root中匹配时,使用jQuery删除一个封闭的div类

Chart.js-显示值应该在其中的引用区域

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

在运行时使用Next JS App Router在服务器组件中运行自定义函数

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

如何创建返回不带`new`关键字的实例的类

如何将数组用作复合函数参数?

如何在Bootstrap中减少网格系统中单个div的宽度

从另一个数组中的对应行/键值对更新数组中的键值对对象

OnClick更改Json数组JSX中的图像源