gpt4 book ai didi

TypeScript:将 T 的所有可选属性断言为非可选

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

给定 T 类型,我想创建一个类型助手来断言可选属性不是可选的。


例如

type Foo {
foo?: string;
bar: number | null;
}

type NoOptionals<T> = /* ??? */;

type FooNoOptionals = NoOptionals<Foo>;

// this will be equal to:
// type FooNoOptionals = { foo: string; bar: number | null };

请注意,如果存在 null,我不想删除它们,理想情况下只是删除可选属性。

这是我试过的:

type NoOptionals<T> = {
[P in keyof T]: T[P] extends undefined ? never : NonUndefined<T[P]>;
};

type Diff<T, U> = T extends U ? never : T;
type NonUndefined<T> = Diff<T, undefined>;

有点效果。如果你有一个像 { foo: string | undefined } 然后它会正确地将它转换为 { foo: string } 。然而,如果你有 { foo?: string } 类型,那么结果类型是 { foo: string |未定义

Playground link

最佳答案

试试这个:

type NoOptionals<T> = {
[P in keyof T]-?: T[P];
};

?之前加上负号您可以删除可选性。

编辑:尚未实现Required<T>

https://github.com/microsoft/TypeScript/blob/5fc917be2e4dd64c8e9504d36615cd7fbfdd4cd3/lib/lib.es5.d.ts#L1446

关于TypeScript:将 T 的所有可选属性断言为非可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59672950/

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