Декоратор класса Typescript, принудительно нацеливает класс на расширение другого класса

#typescript #decorator

#typescript #декоратор

Вопрос:

Я пытаюсь написать декоратор класса, который принудительно использует целевой класс для расширения другого класса.

Гипотетический пример:

 @Component
class MyComponent extends WebComponent
{
}
 

Я хочу @Component , чтобы декоратор принудительно расширял целевой класс WebComponent .

Я много чего перепробовал, но, похоже, ничего не работает. Я думаю, это было бы что-то такое простое, как это:

 export function Component(options: ComponentConstructorOptions)
{
    return <T extends WebComponent>(target: T): T => {
        console.log(target);
        
        return target;
    };
}
 

Итак, если MyComponent НЕ расширяется WebComponent , я хочу, чтобы компиляция typescript завершилась неудачей.

Любая помощь приветствуется!

Ответ №1:

Хорошо, я нашел исправление случайно. Это оказалось так же просто, как использовать typeof в сигнатуре функции декоратора:

 return (target: typeof WebComponent) => {
    console.log(target);
};