feat(typescript-types): Remove optionality of keys in Assign

This commit is contained in:
T. R. Bernstein
2025-07-15 08:10:24 +02:00
parent eac7768bfb
commit 9700b7d46d
2 changed files with 36 additions and 13 deletions

View File

@@ -1,9 +1,15 @@
import type { OptionalKeysOf } from './optional-keys-of.js'
type GetNonOptionalValueAt<Obj, Key, Default> = Key extends keyof Obj
? undefined extends Obj[Key]
? Default
: Obj[Key]
: Default
export type Assign<
Shape extends object,
Defaults extends Pick<Required<Shape>, OptionalKeysOf<Shape>>,
Obj extends Shape
> = {
[K in keyof Shape]: K extends keyof Obj ? Obj[K] : K extends keyof Defaults ? Defaults[K] : never
[K in keyof Shape]-?: GetNonOptionalValueAt<Obj, K, K extends keyof Defaults ? Defaults[K] : never>
}