在 TypeScript 中编写一个 Node 模块以供 TS 和 JS 项目使用
Writing a Node module in TypeScript for consumption by both TS and JS projects
我有一个用 TypeScript 编写的 Express 中间件项目。我想在基于 JS 和 TS 的 Node 项目中使用它。
我在配置我的项目以确保
时遇到问题
- 上游项目正在输出可供 Node 使用的模块
- 我的模块可以在 JS 项目中以
myGreatFunction = require('myGreatFunction') // typeof = function
格式使用
- 我的模块可以使用
import myGreatFunction from 'myGreatFunction' // typeof = function
格式
- 我的模块没有被输出为带有 .default 的对象,这不是预期的,反之亦然,当确实是预期的时候,我的模块没有被输出。
感觉好像我只能实现其中的一些目标而不能实现其他目标。
确保这一点的 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);
明显相同的输出
在打字稿中使用打字稿文件。
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.
在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 导入没有我想要的那么简洁,但我可以处理。
我有一个用 TypeScript 编写的 Express 中间件项目。我想在基于 JS 和 TS 的 Node 项目中使用它。
我在配置我的项目以确保
时遇到问题- 上游项目正在输出可供 Node 使用的模块
- 我的模块可以在 JS 项目中以
myGreatFunction = require('myGreatFunction') // typeof = function
格式使用
- 我的模块可以使用
import myGreatFunction from 'myGreatFunction' // typeof = function
格式
- 我的模块没有被输出为带有 .default 的对象,这不是预期的,反之亦然,当确实是预期的时候,我的模块没有被输出。
感觉好像我只能实现其中的一些目标而不能实现其他目标。
确保这一点的 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);
明显相同的输出
在打字稿中使用打字稿文件。
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.
在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 导入没有我想要的那么简洁,但我可以处理。