在 TypeScript 中编写一个 Node 模块以供 TS 和 JS 项目使用

Writing a Node module in TypeScript for consumption by both TS and JS projects

我有一个用 TypeScript 编写的 Express 中间件项目。我想在基于 JS 和 TS 的 Node 项目中使用它。

我在配置我的项目以确保

时遇到问题

感觉好像我只能实现其中的一些目标而不能实现其他目标。

确保这一点的 TSConfig 属性(上游和下游)的正确咒语是什么?


最后我做出了妥协 - 见下文。

图书馆

tsconfig.json:

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es5",
    "noEmitHelpers": true
  },
}

module.ts:

export class MyClass {
  static Version: string = "1.0";
}

当我们编译这个模块时,我们会得到:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MyClass = /** @class */ (function () {
    function MyClass() {
    }
    MyClass.Version = "1.0";
    return MyClass;
}());
exports.MyClass = MyClass;

TS 客户端

client.ts:

import {MyClass} from "./../src/module";

console.log(MyClass.Version);

编译和 运行 node client.js - 参见“1.0”

JS 客户端

只需从已编译的 ts 客户端 grad 相同的代码:

var module_1 = require("./../src/module");
console.log(module_1.MyClass.Version);

明显相同的输出

  1. 在打字稿中使用打字稿文件。

    Assuming B.ts is the typescript file that you want to use in A.ts, then:
    
        import { B's module that are exported } from 'path/to/B';  // notice there is no extension mentioned here.
    
    Also B must have a export module in it.
    
  2. 在js文件中使用ts文件。

    B.ts = file which you want to use in your main file.
    A.js = your main file.
    In your A.js:
    
        var external = require('path/to/B'); // notice there is no extension mentioned here.
    

最后我妥协了:

库 TSConfig:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "declaration": true
  }
}

图书馆:

export = function myGroovyFunction() {...}

下游项目,TypeScript

import * as myGroovyFunction from 'mygroovyfunction';

下游项目,JavaScript

const myGroovyFunction = require('mygroovyfunction');

TypeScript 导入没有我想要的那么简洁,但我可以处理。