You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

TypeScript中调用CanvasRenderingContext2D的roundRect方法出现TS2339编译错误的解决咨询

TypeScript中调用CanvasRenderingContext2D的roundRect方法出现TS2339编译错误的解决咨询

嘿,我来帮你搞定这个TypeScript里的编译报错问题~

你说在Visual Studio里写TypeScript应用,调用Canvas 2D API的roundRect方法时,弹出了这个编译错误:

TS2339: (TS) Property 'roundRect' does not exist on type 'CanvasRenderingContext2D'

而且你也确认了roundRect确实是Canvas API的合法方法对吧?别着急,咱们一步步来解决:

  • 先检查并升级TypeScript版本
    roundRect是相对较新的Canvas API,TypeScript 4.4及以上的版本才在类型定义里加入了这个方法。你可以打开终端,运行tsc -v查看当前的TS版本,如果版本低于4.4,那就升级一下:
    用npm的话执行npm install typescript@latest --save-dev;用yarn的话就跑yarn add typescript@latest --dev。升级完重新编译项目,大概率就能解决问题了。

  • 手动扩展类型定义(不想升级TS版本时用)
    要是你暂时不想升级TS版本,或者升级后还是有问题,那可以自己手动给CanvasRenderingContext2D添加类型声明:

    1. 在项目里新建一个后缀为.d.ts的类型声明文件,比如叫canvas-type-ext.d.ts
    2. 在这个文件里加入下面的代码:
      interface CanvasRenderingContext2D {
        roundRect(x: number, y: number, width: number, height: number, radius: number | DOMPointInit | (number | DOMPointInit)[]): void;
      }
      

    保存之后,TypeScript就会识别到roundRect方法的类型,不会再报错啦。

  • 临时应急:类型断言(不推荐)
    要是你只是想快速跑通代码,也可以用类型断言把上下文强制转成any类型,不过这种方法会丢掉TypeScript的类型检查优势,只适合临时用用:

    const canvas = document.getElementById('myCanvas') as HTMLCanvasElement;
    const ctx = canvas.getContext('2d') as any;
    ctx.roundRect(10, 10, 60, 60, 8);
    

内容来源于stack exchange

火山引擎 最新活动