constructor(
    tileCoord,
    state,
    urlTileCoord,
    getSourceTiles,
    removeSourceTiles,
  ) {
    super(tileCoord, state, {transition: 0});

    /**
     * @private
     * @type {CanvasRenderingContext2D|null}
     */
    this.context_ = null;

    /**
     * Executor groups. Read/written by the renderer.
     * @type {Object<string, Array<import("./render/canvas/ExecutorGroup.js").default>>}
     */
    this.executorGroups = {};

    /**
     * Number of loading source tiles. Read/written by the source.
     * @type {number}
     */
    this.loadingSourceTiles = 0;

    /**
     * @type {Object<string, ImageData>}
     */
    this.hitDetectionImageData = {};

    /**
     * @private
     * @type {!Object<string, ReplayState>}
     */
    this.replayState_ = {};

    /**
     * @type {Array<import("./VectorTile.js").default>}
     */
    this.sourceTiles = [];

    /**
     * @type {Object<string, boolean>}
     */
    this.errorTileKeys = {};

    /**
     * @type {number}
     */
    this.wantedResolution;

    /**
     * @type {!function():Array<import("./VectorTile.js").default>}
     */
    this.getSourceTiles = getSourceTiles.bind(undefined, this);

    /**
     * @type {!function(VectorRenderTile):void}
     * @private
     */
    this.removeSourceTiles_ = removeSourceTiles;

    /**
     * @type {import("./tilecoord.js").TileCoord}
     */
    this.wrappedTileCoord = urlTileCoord;
  }
@param {import("./tilecoord.js").TileCoord} tileCoord Tile coordinate.
@param {import("./TileState.js").default} state State.
@param {import("./tilecoord.js").TileCoord} urlTileCoord Wrapped tile coordinate for source urls.
@param {function(VectorRenderTile):Array<import("./VectorTile").default>} getSourceTiles Function.
@param {function(VectorRenderTile):void} removeSourceTiles Function.