Version: 0.1.00.2.00.3.00.3.10.4.00.4.10.5.00.5.10.5.20.6.00.7.00.7.10.8.00.8.10.9.00.10.00.11.00.12.00.13.00.13.10.14.00.15.00.15.10.16.00.17.00.18.00.18.10.19.00.20.00.20.10.20.20.21.00.21.10.21.20.21.31.0.01.0.11.0.21.1.01.1.11.1.21.1.31.2.01.2.11.2.21.2.31.3.01.4.02.0.02.1.02.2.02.3.02.3.12.3.22.3.32.3.42.4.02.5.02.5.12.5.22.5.32.5.42.6.02.7.02.8.02.9.02.10.02.11.02.11.12.11.22.12.02.12.12.12.22.13.02.13.12.14.02.15.02.15.12.16.02.17.02.18.02.18.12.19.03.0.03.1.03.2.03.3.03.4.03.5.03.5.13.5.23.5.33.5.43.5.53.5.63.5.73.6.03.6.13.7.03.7.13.7.23.8.03.9.03.10.03.11.03.11.13.12.03.13.03.13.14.0.04.1.04.2.04.3.04.3.14.3.24.3.34.4.04.5.04.6.04.7.04.7.14.8.04.8.14.8.24.8.34.9.04.10.04.10.14.10.24.10.34.11.04.11.14.12.04.13.04.13.14.14.04.15.04.16.04.17.04.18.04.18.14.18.24.18.34.19.04.20.04.20.14.21.04.22.04.22.14.23.04.24.04.25.04.26.04.26.1
import type {Merge} from './merge';
/**
Override existing properties of the given type. Similar to `Merge`, but enforces that the original type has the properties you want to override.
This is useful when you want to override existing properties with a different type and make sure that these properties really exist in the original.
@example
```
type Foo = {
a: string
b: string
}
type Bar = OverrideProperties<Foo, {b: number}>
//=> {a: string, b: number}
type Baz = OverrideProperties<Foo, {c: number}>
// Error, type '{ c: number; }' does not satisfy the constraint '{ c: never; }'
type Fizz = OverrideProperties<Foo, {b: number; c: number}>
// Error, type '{ b: number; c: number; }' does not satisfy the constraint '{ b: number; c: never; }'
@category Object
*/
export type OverrideProperties<
TOriginal,
// This first bit where we use `Partial` is to enable autocomplete
// and the second bit with the mapped type is what enforces that we don't try
// to override properties that doesn't exist in the original type.
TOverride extends Partial<Record<keyof TOriginal, unknown>> & {
[Key in keyof TOverride]: Key extends keyof TOriginal
? TOverride[Key]
: never;
},
> = Merge<TOriginal, TOverride>;