BugDomain: Mapped TypesHelp Wanted
仓库指标
- Star
- (48,455 star)
- PR 合并指标
- (平均合并 6天 17小时) (30 天内合并 9 个 PR)
描述
🔎 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