gpt4 book ai didi

typescript - 在 TypeScript 中扩展 DataView 会抛出 "Constructor DataView requires ' new'"

转载 作者:行者123 更新时间:2023-12-05 07:06:03 26 4
gpt4 key购买 nike

我想用如下状态和功能扩展 DataView:

export class MyDataView extends DataView
{
public position: number;

public constructor(buffer: ArrayBuffer | SharedArrayBuffer)
{
super(buffer);
}

public readInt32(): number
{
const result = this.getInt32(this.position);
this.position += 4;
return result;
}
}

然后我尝试创建一个实例如下:

const fileSelector = document.getElementById("file-selector");
fileSelector.addEventListener("change", async (ev) =>
{
const fileList = (<HTMLInputElement>ev.target).files;
const arrayBuffer = await fileList[0].arrayBuffer();
const myDataView = new MyDataView(arrayBuffer);
});

但是,我在控制台中记录了以下错误:

Uncaught (in promise) TypeError: Constructor DataView requires 'new'
at MyDataView.DataView
at new MyDataView (s. below)

去到它标记的位置会出现如下JS代码。我不确定它是否正确。在 similar JS-only issue ,我看到应该在这里调用 super() 而不是 _super.call()

function MyDataView(buffer) {
var _this = this;
_this = _super.call(this, buffer) || this;
return _this;
}

如何在 TypeScript 中正确扩展 DataView?我做错了什么?

最佳答案

您的 tsconfig.json 中的“目标”可能设置为“es5”,并且没有扩展 ES6 类的 ES5 方式,例如 Map、Set 或 DataView。

(来源:https://github.com/microsoft/TypeScript/issues/10853#issuecomment-246211140)

对我有用的解决方案是我将“target”设置为“es6”,然后转译的代码来自:

var MyClass = /** @class */ (function (_super) {
__extends(BinaryIO, _super);
function BinaryIO(buffer, byteOffset, byteLength) {
var _this = _super.call(this, buffer, byteOffset, byteLength) || this;
_this.position = 0;
return _this;
}
...
}

class MyClass extends DataView {
constructor(buffer, byteOffset, byteLength) {
super(buffer, byteOffset, byteLength);
this.position = 0;
}
...
}

关于typescript - 在 TypeScript 中扩展 DataView 会抛出 "Constructor DataView requires ' new'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62613064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com