0

以下是 TypeScript Docs 中有关装饰器的一些代码:

function classDecorator<T extends {new(...args:any[]):{}}>(constructor:T) {
    return class extends constructor {
        newProperty = "new property";
        hello = "override";
    }
}


@classDecorator
class Greeter {
    property = "property";
    hello: string;
    constructor(m: string) {
        this.hello = m;
    }
}

console.log(new Greeter("world"));

但是,如果您尝试使用,newProperty则会收到转译器错误:

类型“Greeter”上不存在属性“newProperty”。

你如何输入这个,以便编译器知道它newProperty实际上存在?

4

1 回答 1

1

不幸的是,装饰器不能影响它所使用的类型的结构。您可以将装饰器用作简单函数并将结果用作类:

const Greeter = classDecorator(class {
    property = "property";
    hello: string;
    constructor(m: string) {
        this.hello = m;
    }
    static test ="";
})
var d = new Greeter("world");
console.log(d.newProperty);
于 2017-11-24T11:29:25.437 回答