vcxiaohan2 2020-02-25 00:11 采纳率: 0%
浏览 248

typescript装饰器之后,怎么让vscode识别新增加的方法

以下给类添加了装饰器,但是在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();

  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-17 08:46
    关注

    参考GPT和自己的思路:

    对于这个问题,你可以使用“命令声明(declaration merging)”来解决。命令声明是指将你所定义的类或接口与该类或接口在其他地方的定义合并。具体来说,你可以在一个名为types文件夹里面新建一个types.d.ts文件,然后在里面写入以下代码:

    declare module 'Person' {
      interface Person {
        say(): void;
      }
    }
    

    这里需要注意的是,'Person'是你所定义的类的名称。这个代码会告诉VS Code,在这个模块里面,你为Person类增加了一个叫做“say”的方法,并且规定了这个方法的返回值为void。这样一来,你就可以在你的项目中调用这个新增加的方法,而不需要进行任何额外的as断言操作了。

    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘