以下给类添加了装饰器,但是在vscode中调用的时候,新增加的方法会飘红,不用as断言怎么去解决啊
function say(constructor: any) {
constructor.prototype.say = function() {
console.log(this.name);
};
}
@say
class Person {
constructor(public name: string) {}
}
let red = new Person('red');
red.say();
参考GPT和自己的思路:
对于这个问题,你可以使用“命令声明(declaration merging)”来解决。命令声明是指将你所定义的类或接口与该类或接口在其他地方的定义合并。具体来说,你可以在一个名为types文件夹里面新建一个types.d.ts文件,然后在里面写入以下代码:
declare module 'Person' {
interface Person {
say(): void;
}
}
这里需要注意的是,'Person'是你所定义的类的名称。这个代码会告诉VS Code,在这个模块里面,你为Person类增加了一个叫做“say”的方法,并且规定了这个方法的返回值为void。这样一来,你就可以在你的项目中调用这个新增加的方法,而不需要进行任何额外的as断言操作了。