gpt4 book ai didi

javascript - 使用 typescript 中的 javascript 库(具有继承的 javascript 依赖项)

转载 作者:行者123 更新时间:2023-12-03 06:56:55 25 4
gpt4 key购买 nike

上下文

我正在用纯 Typescript 构建一个项目来与聊天服务器通信。对于该通信,我正在使用 strophe.js 库。

Strophe lib 具有三种风格:commonjsesmumd。根据我搜索的内容,我不太了解这些格式之间的区别:

  • commonjs 用于节点
  • esm 用于网络应用
  • umd 是通用的

基于此,我可以使用 esmumd,因为此应用旨在在浏览器中运行。

我写了一个 Typescript 文件作为 strophe 库的包装器。这是我导入它的方式:

import * as core from './dependencies/strophe.umd.js'; // using UMD
import core from './dependencies/strophe.esm.js'; // using ESM
const Strophe = core.Strophe;

// ...
// Usage example:
this.conn = new Strophe.Connection(options.connection, options.options);

我的问题

使用ESM格式时:

我可以看到接口(interface)定义,调用它的函数等。一切都很好,但浏览器抛出:未捕获的类型错误:无法解析模块说明符“abab”。相对引用必须以“/”、“./”或“../”开头。

使用UMD格式时:

一开始没有显示错误,但 Strophe 没有被正确导入。尝试调用连接函数时会抛出此错误:

未捕获的类型错误:无法读取未定义的属性“连接”

更新


沙盒:https://codesandbox.io/s/bitter-grass-sh4s9

为了测试这一点,我运行 tsc 然后运行 ​​live-server 来提供文件

tsconfig.json

{
"extends": "@tsconfig/recommended/tsconfig.json",
"compilerOptions": {
"target": "es2015",
"module": "es2015",
"baseUrl": "src",
"outDir": "build",
"sourceMap": false,
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"allowJs": true,
"noImplicitAny": false,
"moduleResolution": "node",
"removeComments": true,
"lib": ["es2018", "dom"],
"types": ["jest", "node"],
"paths": {
"@core/*": ["./src/core"]
}
},
"include": ["src/**/*.ts"]
}

最佳答案

通过 npm 或 Yarn 等包管理器将 Strophe.js 添加为依赖项是个好主意。看起来您已将它们手动放置在名为 dependencies 的文件夹中。

添加依赖:yarn add strophe.js
添加类型声明:yarn add -D @types/strophe.js

这会将 Strophe.js 下载到您的 node_modules 文件夹中。

在您的代码中导入它:

import { Strophe } from "strophe.js";
this.conn = new Strophe.Connection(options.connection, options.options);

关于javascript - 使用 typescript 中的 javascript 库(具有继承的 javascript 依赖项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63810592/

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