输入'CanvasRenderingContext2D | WebGLRenderingContext'不能分配给'CanvasRenderingContext2D'类型

Mat*_*vis 5 typescript visual-studio-2015 typescript1.5

我已经使用Typescript 1.5 Beta升级到Visual Studio 2015社区.我收到以下错误.

输入'CanvasRenderingContext2D | WebGLRenderingContext'不能分配给'CanvasRenderingContext2D'类型

这发生在以下行

var canvas: HTMLCanvasElement = $(element).find('canvas').get(0);
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

我已将TypeScript工具版本设置为1.4和1.5并获得相同的错误.

Fen*_*ton 12

从该错误消息,的返回类型getContext似乎是一个联合类型,这意味着它是中的任一个CanvasRenderingContext2D或WebGLRenderingContext.

编译器无法分辨哪个,所以你需要帮助它:

var ctx = <CanvasRenderingContext2D> canvas.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用最新版本的一切,这可以正常工作:

var canvas = <HTMLCanvasElement> $('#example').find('canvas').get(0);
var ctx: CanvasRenderingContext2D = canvas.getContext("2d");
Run Code Online (Sandbox Code Playgroud)

所以它看起来不太对劲.

当前的定义getContext有一个专门的签名,值为"2d",应该给你一个CanvasRenderingContext2D.这是三个签名......

  1. "2d": CanvasRenderingContext2D
  2. "experimental-webgl": WebGLRenderingContext
  3. 其他string:CanvasRenderingContext2D | WebGLRenderingContext

如果它不能识别传入的字符串,它应该只返回联合类型.

如果您在键入(after后自动完成没有建议这三个重载getContext,则可能表示存在问题.

具有2d参数的getContext的自动完成