【发布时间】:2020-01-04 13:14:17
【问题描述】:
我似乎能够创建画布,但是当我来获取上下文时
const resizeImage = async (maxSize: number) => {
const image = originalImage;
const id = positionId;
const resizeCanvas = document.createElement('canvas');
resizeCanvas.width = maxSize;
resizeCanvas.height = maxSize;
const ctx: CanvasRenderingContext2D = resizeCanvas.getContext('2D');
// ^ Error
...
错误是
Type 'CanvasRenderingContext2D | ImageBitmapRenderingContext | WebGLRenderingContext | WebGL2RenderingContext | null' is not assignable to type 'CanvasRenderingContext2D'.
Type 'null' is not assignable to type 'CanvasRenderingContext2D'.ts(2322)
【问题讨论】:
-
这意味着
resizeCanvas.getContext('2D')可以返回null,但是您将它分配给CanvasRenderingContext2D类型的变量(即不能为null)。所以你需要在分配它之前确保结果不为空。如果为null,你想做什么,抛出错误? -
我认为您的建议对我使用
const ctx: CanvasRenderingContext2D = resizeCanvas.getContext('2d')!;有所帮助 2d -
嗯,是的,您可以这样做,但是只有在您绝对确定
resizeCanvas.getContext('2D')在运行时永远不会返回 null 时,才应该真正使用非空断言运算符。如果您确定就可以,但如果不是最好先检查 null,然后在分配给ctx之前处理它。否则你的程序可能会在运行时崩溃。 -
您是否愿意提交一个带有示例的答案并且不接受它
标签: reactjs typescript canvas