Горячая перезагрузка прерывает WebGL2RenderingContext - PullRequest
0 голосов
/ 03 января 2019

У меня есть webpack/typescript/webgl2 -установка.У меня есть класс, который представляет WebGL2RenderingContext, который показан ниже:

import { isNullOrUndefined } from "util";

export class GraphixContext implements Context<WebGL2RenderingContext> {
  private gl: WebGL2RenderingContext;
  private canvas: HTMLCanvasElement;
  private constructor(
    context: WebGL2RenderingContext,
    canvas: HTMLCanvasElement
  ) {
    this.gl = context;
    this.canvas = canvas;
  }

  public getContext(): WebGL2RenderingContext {
    return this.gl;
  }
  public appendCanvas(id: string) {
    document.body.appendChild(this.canvas);
    this.canvas.id = id;
  }

  public static build(): GraphixContext {
    let canvas = document.createElement("canvas");
    const gl = canvas.getContext("webgl2");

    if (isNullOrUndefined(gl)) {
      throw new Error("WebGL could not be initialized");
    }
    return new GraphixContext(gl, canvas);
  }
}

Я запускаю webpack-dev-server с командой

`"scripts": {
    "build": "webpack ",
    "watch": "webpack --watch",
    "start": "webpack-dev-server --open"
  },`

Когда я начинаю вводить GraphixContext.ts Горячая перезагрузка активируется и webpack создает bundle.js.Однако ТОЛЬКО если я отредактирую код в GraphixContext, появится следующая ошибка:

  TS2345: Argument of type 'WebGLRenderingContext | CanvasRenderingContext2D' is not assignable to parameter of type 'WebGL2RenderingContext'.
  Type 'WebGLRenderingContext' is missing the following properties from type 'WebGL2RenderingContext': READ_BUFFER, UNPACK_ROW_LENGTH, UNPACK_SKIP_ROWS, UNPACK_SKIP_PIXELS, and 347 more.

Все остальные правки в моем проекте работают просто отлично.У кого-нибудь есть объяснение этой ошибке?

1 Ответ

0 голосов
/ 04 января 2019

Это ошибка типа.

Проблема в том, что используемая вами система типов считает, что canvas.getContext может возвращать только WebGLRenderingContext или CanvasRenderContext2D, но не WebGL2RenderingContext, поэтому, когда вы вызываете конструктор GraphixContext, она считает, чтоgl неправильный тип.

Изменить это

 const gl = canvas.getContext("webgl2");

на это?

 const gl = <WebGL2RenderingContext>canvas.getContext("webgl2");

Или исправить ваше определение canvas.getContext, чтобы оно могло вернутьWebGL2RenderingContext

Возможно, проблема в этой области

https://github.com/Microsoft/TypeScript/blob/b7d7d5f7b39a5b9619c77590e5fe7f434ed68f1e/src/lib/dom.generated.d.ts#L5998

Нет записи для "webgl2"

...