gpt4 book ai didi

typescript - 如何在 TypeScript 中使可为空的属性成为可选的?

转载 作者:行者123 更新时间:2023-12-05 09:02:02 38 4
gpt4 key购买 nike

我有这样的类型:

type City = {
name: string;
id: number | null;
};

并想把它变成这样的类型:

type City = {
name: string;
id?: number;
};

我看过很多解释如何使可选类型可为 null 的帖子,但我想在这里做相反的事情。

有什么方法可以创建类似 OptionalNullable<T> 的 TypeScript 泛型函数吗?处理这个?

最佳答案

这应该可以解决问题:

type PickNullable<T> = {
[P in keyof T as null extends T[P] ? P : never]: T[P]
}

type PickNotNullable<T> = {
[P in keyof T as null extends T[P] ? never : P]: T[P]
}

type OptionalNullable<T> = {
[K in keyof PickNullable<T>]?: Exclude<T[K], null>
} & {
[K in keyof PickNotNullable<T>]: T[K]
}

我创建了两个实用程序类型,它们分别从一个类型中选择所有可为 null 而非不可为 null 的属性。我们可以使用这些来构造一个新类型,其中所有可为空的属性都成为可选的。我还使用了 Exclude 来摆脱 null

可以这样使用:

type City = {
name: string;
id: number | null;
};

type Test = OptionalNullable<City>
// {
// id?: number | undefined;
// } & {
// name: string;
// }

Playground

关于typescript - 如何在 TypeScript 中使可为空的属性成为可选的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72165227/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com