我在我的 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 重新安装了模块,但没有任何改变。