type-fest icon indicating copy to clipboard operation
type-fest copied to clipboard

Utility Type Request: DeepUndefinedToNull

Open dawidk92 opened this issue 1 year ago • 2 comments

I am working on a TypeScript project where I need to transform a type with optional properties into a type where the optional properties are replaced with union types that include null. For example, I would like to transform this type A:

interface A {
  a?: string;
  b?: { c?: number };
  d: boolean;
}

into this type B:

interface B {
  a: string | null;
  b: { c: number | null } | null;
  d: boolean;
}

Furthermore, I would like this utility type to also support property access, such that the following code:

type C = DeepUndefinedToNull<A["a"]>

returns a type C equivalent to string | null.

Despite extensive efforts and even assistance from OpenAI's GPT model, I've been unable to create a utility type that achieves this. I believe this could be a valuable addition to type-fest and would be useful for many TypeScript developers who need to handle optional properties in this way.

Would you please consider adding such a utility type to type-fest? Thank you for your time and consideration.

Upvote & Fund

  • We're using Polar.sh so you can upvote and help fund this issue.
  • The funding will be given to active contributors.
  • Thank you in advance for helping prioritize & fund our backlog.
Fund with Polar

dawidk92 avatar Jun 22 '23 13:06 dawidk92

Hey @dawidk92 , wanted to let you know that I opened a PR implementing this request. It's a pretty solid implementation IMO, and as a bonus it also handles union types. Definitely open to feedback if you want to give it a go!

ahrjarrett avatar Jul 15 '23 00:07 ahrjarrett

https://github.com/sindresorhus/type-fest/pull/648#issuecomment-1703871287

sindresorhus avatar Sep 03 '23 06:09 sindresorhus