-
Notifications
You must be signed in to change notification settings - Fork 13.2k
Open
Labels
BugA bug in TypeScriptA bug in TypeScriptDomain: Mapped TypesThe issue relates to mapped typesThe issue relates to mapped typesHelp WantedYou can do thisYou can do this
Milestone
Description
π Search Terms
optional mapped type
π Version & Regression Information
- This changed between versions 5.4.5 and 5.5.4
β― Playground Link
π» Code
type OptionalToUnionWithUndefined<T> = {
[K in keyof T]: T extends Record<K, T[K]>
? T[K]
: T[K] | undefined
}
type Intermediate = OptionalToUnionWithUndefined<{ a?: string }> // { a?: string | undefined }
type Literal = { a?: string | undefined } // same type as Intermediate
type Res1 = Required<Intermediate> // { a: string }
type Res2 = Required<Literal> // { a: string | undefined }π Actual behavior
Res1 and Res2 are different types
π Expected behavior
they should be the same because the inputs are
Additional information about the issue
This issue may share the cause with #59902
Metadata
Metadata
Assignees
Labels
BugA bug in TypeScriptA bug in TypeScriptDomain: Mapped TypesThe issue relates to mapped typesThe issue relates to mapped typesHelp WantedYou can do thisYou can do this