【问题标题】:Cannot use my own TypeScript library in JavaScript无法在 JavaScript 中使用我自己的 TypeScript 库
【发布时间】:2021-11-01 06:17:12
【问题描述】:

我一直在努力完成一项看似简单的任务。我将不胜感激。

我正在用 TypeScript 编写一个私有库,用于我们公司的 TypeScript 和 JavaScript 项目。

该库运行良好,但我似乎无法在 JavaScript 中导入它。

TS 中的库

package.json

{
  "name": "rr-comm-bus-js",
  "version": "0.3.0",
  "description": "",
  "main": "lib/src/index.js",
  "types": "lib/src/index.d.ts",
  "scripts": {
    "dev": "ts-node-dev --respawn src/dev/dev.ts",
    "build": "rm -rf lib && tsc"
  },
  "keywords": [],
  "dependencies": {
    "redis": "^3.1.2"
  },
  "devDependencies": {
    "@types/node": "^16.4.12",
    "@types/redis": "^2.8.31",
    "nodemon": "^2.0.12",
    "ts-node-dev": "^1.1.8",
    "typescript": "^4.3.5"
  }
}

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "esModuleInterop": true,
    "target": "es6",
    "moduleResolution": "node",
    "sourceMap": true,
    "outDir": "lib",
    "declaration": true,
    "noImplicitAny": true,
    "declarationMap": true,
    "allowJs": true
  },
  "lib": ["es2015"]
}

JavaScript(Node.js,我想在其中使用这个库)

简化代码...

const MyModule = require("my-module-name");
const myModule = new MyModule(); <--- this line is where the error happens

所以我得到的错误是:

const myModule = new MyModule();
          ^
TypeError: MyModule is not a constructor

这表明 MyModule 甚至不是一个类,但它确实是。我确实获得了 TS 库中类型的智能感知,但我无法使用该类。

这里是 TS 转 JS 代码:

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const declarations_1 = require("./declarations");
class Communicator {
    constructor() {
         // constructor logic
        };

        // more methods...

}
exports.default = MyModule;

我尝试了多篇文章和指南,更改了 tsconfig.json,并将 "type":"module" 添加到 package.json,但由于某种原因,我根本无法让它工作。

任何指针将不胜感激。

【问题讨论】:

  • 您在导入语句中缺少"
  • @flx 更新问题,在复制我的代码时忘记了"

标签: javascript node.js typescript node-modules


【解决方案1】:

试试这个

const MyModule = require("my-module-name").default;

const myModule = new MyModule();

【讨论】:

  • 谢谢,这已经解决了.....为什么需要这个符号?你知道是否有办法打包我的 TS 库以便我可以使用 import 导入它?
  • 我不喜欢在 typescript 中使用“export default”,而只使用“export class MyClass”。在这种情况下,javascript 将类似于 'const {MyClass}=require('mylibrary');'
猜你喜欢
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2012-06-07
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
相关资源
最近更新 更多