1

我想创建一个装饰器,如果需要,它会覆盖一些变量。就像是

const Decorator = <T extends { new (...args: any[]): any }>(target: T) => {
    return class extends target {
        field = 1;
        field2 = 2;
    };
};

但是对于一个类应该只有field,对于其他类应该只有field2,其中一些应该两者兼而有之。

我试过了,但它不起作用

const Decorator = <T extends { new (...args: any[]): any }>(target: T) => {
    if (...) {
        target.prototype.field = 1;
    }
    if (...) {
        target.prototype.field2 = 2;
    }
    return class extends target {};
};
4

1 回答 1

1

你返回的东西只是一个类。所以,做一个构造函数

const Decorator = <T extends { new (...args: any[]): any }>(target: T) => {
    return class extends target {
        constructor(...args1: any[]) {
            super(...args1);
            if (...) {
                this.field = 1;
            }
            if (...) {
                this.field2 = 2;
            }
        }
    };
};
于 2021-02-22T20:24:03.043 回答