Общий интерфейс, расширяющий параметризованный интерфейс в TypeScript - PullRequest
0 голосов
/ 14 января 2019

У меня есть такие типы, где я перезаписываю один тип при расширении интерфейса:

type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

interface HTMLEvent<T> extends Omit<Event, 'target'> {
    target: T;
}

и теперь я хочу создать тип EventType, который будет принимать тип события, например MouseEvent и целевой тип.

Я пробовал это:

interface EventType<E, T> extends Omit<E, 'target'> {
    target: T;
}

const e: EventType<MouseEvent, HTMLButtonElement>;

но получил ошибку:

Интерфейс может расширять только тип объекта или пересечение объекта типы со статически известными членами.

Я думаю, что мне нужна функция, которая создаст тип.

Возможен ли интерфейс EventType в TypeScript? Можно ли иметь один универсальный тип без необходимости указывать универсальный интерфейс для каждого типа события.

1 Ответ

0 голосов
/ 14 января 2019

Ошибка довольно ясна в отношении ограничений, накладываемых на наследование интерфейса. Поскольку тип содержит параметр неразрешенного типа, Typescript не позволит использовать его в предложении extends интерфейса.

Вы можете получить аналогичный эффект, используя тип пересечения:

type EventType<E extends Event, T> = Omit<E, 'target'> &  {
    target: T;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...