首页 文章

装饰类型

提问于
浏览
0

一个类被装饰为具有 foo 静态属性:

interface IFoo {
    foo: boolean;
}

function foo<T>() {
    return (Class: T): T & IFoo => Object.assign(Class, { foo: true });
}

@foo<typeof Bar>()
class Bar { }

const Baz: IFoo = Bar;
console.log(Baz.foo);

这会导致错误:

类型'typeof Bar'不能指定为'IFoo'类型 .

似乎TypeScript输入系统忽略了 Bar 被装饰的事实 .

我知道装饰器存在某些类型问题 . 这里有什么变通方法?

1 回答

  • 2

    Typescript不允许修饰符修改修饰类的结构 . 但是你可以使用函数taht获取类并修改它:

    interface IFoo {
        foo: boolean;
    }
    
    function foo<T extends  new (...  args: any[]) => any>(cls:T) : T & IFoo {
        return Object.assign(cls, { foo: true });
    }
    
    
    const Bar =foo(class  { })
    
    console.log(Bar.foo);
    

相关问题