У меня следующий интерфейс A, и мне нужно создать тип, расширяющий A, но переопределяющий определение свойства type
A
type
interface A { type: 'user'; name: string; } type B = ??? let q: B = { type: 'admin', name: 'John' }
Как это сделать?
type B = Omit<A, 'type'> & {type: 'admin'};
Вы можете использовать комбинацию Omit на пересечении с другим типом, который добавляет свойство обратно с другим типом:
Omit
type B = Omit<A, 'type'> & { type: "admin" }
Playground Link
Вы также можете создать более общую версию этого типа замены:
type Replace<T, TOverride> = Omit<T, keyof TOverride> & TOverride type B = Replace<A, { type: "admin" }>