У меня есть такие типы, в которых я перезаписываю один тип при расширении интерфейса:
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>;
но получил ошибку:
An interface can only extend an object type or intersection of object types with statically known members.
Я думаю, что мне нужна функция, которая создаст тип.
Возможен ли интерфейс EventType в TypeScript? Возможно ли иметь один общий тип без необходимости указывать общий интерфейс для каждого типа события.






Ошибка довольно ясна в отношении ограничений, накладываемых на наследование интерфейсов. Поскольку тип содержит неразрешенный параметр типа, Typescript не позволит вам использовать его в предложении extends интерфейса.
Вы можете получить аналогичный эффект, используя вместо этого тип пересечения:
type EventType<E extends Event, T> = Omit<E, 'target'> & {
target: T;
}