persona-community-5/.pnpm-store/v3/files/79/85704f0b4413351184276cb270a70ad9223a87cf817caf2e3bce662ea38f764a441b94e150be4cadd0048c3400bef36258a65219f165d3bb7758bcbf8a0a45
rdev-worker a1d0d1bf1c
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
build: /implement-feature community-ui --requirements 'Build the React commu...
2026-02-24 08:22:30 +00:00

37 lines
1.2 KiB
Plaintext

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>;