0

我在我的 Visual Studio 2022 angular12 项目中安装了 capnp-ts:

https://github.com/jdiaz5513/capnp-ts

当我只想在其文档中使用“new capnp.Message()”方法时,它会在浏览器上引发此错误:

TypeError: capnp_ts_src_serialization_message__WEBPACK_IMPORTED_MODULE_1__.Message is not a constructor

代码就像 github 自述文件:

import * as capnp from "capnp-ts";

import { MyStruct } from "./myschema.capnp.js";

export function loadMessage(buffer: ArrayBuffer): MyStruct {
  const message = new capnp.Message(buffer);

  return message.getRoot(MyStruct);
}

正如您在 Message.ts 文件中看到的,它有一个普通的构造函数:

https://github.com/jdiaz5513/capnp-ts/blob/master/packages/capnp-ts/src/serialization/message.ts

在 Visual Studio 中编写或编译时没有问题。它也显示了构造函数的参数。

我看到了很多关于“TypeError: ... is not a constructor”错误(比如更改导入行、更改源等)的解决方案的页面,但没有一个对此有帮助!

项目中的其他类和 capnproto 对象没有这个问题,我在“新”构造中正常使用它们。

那么 Message.ts 文件有什么问题?!


更新:

我现在检查了另一种更改导入线的方法。我用它来导入消息:

const Message = require('capnp-ts/src/serialization/message.js').Message;

并使用“new Message()”而不是“new capnp.Message()”

但这解决了 Message 类本身的问题,并且项目中有很多这样的类,需要类似的更改!

所以它现在在 message.js 文件中引发了一个新错误:

TypeError: arena_1.SingleSegmentArena 不是构造函数

如果我解决了它,就会有另一个:D

所以我知道问题出在生成的js文件中,可以通过更改整个capnp-ts模块来解决问题,但是为什么会出现所有这些不兼容呢?!以及如何在不更改模块源文件的情况下修复它?!

我通过 npm 重新安装了模块,但没有任何改变。

4

0 回答 0