Как добавить / переопределить свойства в интерфейсе в TypeScript? - PullRequest
0 голосов
/ 07 мая 2020

У меня следующий интерфейс A, и мне нужно создать тип, расширяющий A, но переопределяющий определение свойства type

interface A {
    type: 'user';
    name: string;
}

type B = ???

let q: B = {
    type: 'admin',
    name: 'John'
}

Как это сделать?

Ответы [ 2 ]

1 голос
/ 07 мая 2020
type B = Omit<A, 'type'> & {type: 'admin'};
1 голос
/ 07 мая 2020

Вы можете использовать комбинацию 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"
}>

Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...