类 的 npm 包在打字稿和转译版本之间不兼容

npm package with classes not compatible between typescript and transpiled versions

你好,我正在编写一个 npm 包,它是用打字稿编码并转译的。

该包现在已在打字稿应用程序中使用,但我有 1 个错误:

[ts]
Argument of type 'import("/home/chriss/Sites/ORM/connection").DB' is not assignable to parameter of type 'import("/home/chriss/Sites/ORM/dist/connection").DB'.
Property 'connections' is protected but type 'DB' is not a class derived from 'DB'.

相同Class只是一个是打字稿,另一个是转译的

我这样声明:

import { DB } from "@unicoderns/orm/connection"
...
constructor(config: Config, baseURL: string) {
    this.config = config;
    this.db = new DB({ dev: config.dev, connection: config.dbconnection });
}

然后像这样调用模型:

this.usersTable = new users.Users(jsloth.db);

其中 jsloth.db 是第一个代码中的 this.db。

这是 在 npm 包中 期待什么:

constructor(DB: DB, privacy?: string);

我能做什么?

编辑 1:

软件包已经发布,源代码位于:

https://github.com/unicoderns/ORM

肮脏而快速的解决方法是将 | any 添加到预期类型 model.ts 在第 56 行 constructor(DB: DB | any

这应该更正 :)

使用这个包的库也是开源的,代码可以在以下位置找到:

https://github.com/unicoderns/JSloth

从包中删除 | any 后,几个文件应该 "yell" IDE 中的错误,但可能仍然有效,例如第 57 和 58 行的 source/system/apps/auth/endpoint/v1/index

再次感谢您的帮助。

如果将 @unicoderns/orm 包的 package.json 中的 "main""typings" 字段指向 dist 子目录,则导入 @unicoderns/orm 将转到该子目录。当您导入 @unicoderns/orm 的非主模块时,例如 source/system/lib/core.ts 第 25 行:

import { DB } from "@unicoderns/orm/connection"

需要使用dist中的路径来保持一致性:

import { DB } from "@unicoderns/orm/dist/connection"

有关详细信息,请参阅 this thread and particularly this comment