我的问题是使用commonJS(节点样式)和ES6模块(使用typescript)。我有这个使用commonJS模块系统的1.5角应用程序。我试图使用typescript来创建应用程序中的一个工厂。几乎没有问题。
我们可以使用typescript import 关键字导入导出的模块 使用commonJS module.exports语法?例如,说我们有 我们希望在我们的打字稿文件中使用下面的RandomService.js。一世 注意到从一个导入*作为随机服务 ' ../../服务/ RandomService.js'扔了一些与之相关的错误 能够找到该模块。我通过使用a来实现这一点 require(),但只是想知道是否可以这样做 打字稿?
var randomString = require('random-string');
module.exports = {
getSuperRandom: function() {
var x = 'super-random-' + randomString();
return x;
}
}
当我们从typescript文件中导出模块时通常会导出 object有一个保存我们对象的属性。甚至做出口 默认导致.default属性具有导出的对象。 无论如何我们可以将导出的对象直接设置为 export对象(就像我们在commonJS模块系统中可以做到的那样) 我们做module.exports =' helloservice')?
答案 0 :(得分:2)
例如,如果您在module1.js
中使用此javascript模块:
exports.f = function(s) {
return s.length
}
您必须提供描述模块的声明文件,并在文件module1.d.ts
中定义其导出的类型:
export declare function f(s: string): number;
然后您可以将此模块与import
一起使用。如果将此代码放在test.ts
文件中的module1.d.ts
所在目录中,则Typescript会找到导入的模块:
import * as module1 from './module1';
let n: number = module1.f('z');
如果使用--module=commonjs
(这是默认值)编译此代码,您将获得非常正常的commonjs代码:
"use strict";
var module1 = require('./module1');
var n = module1.f('z');
如果您的模块导出某个对象,例如此module2.js
:
module.exports = {
a: 'a',
n: 1
};
import m2 = require('./module2');
let n1: string = m2.a;
声明文件module2.d.ts
必须使用export assignment
语法:
export = {} as {a: string, n: number};
实际值{}
在声明文件中无关紧要,可以是任何内容 - 只有类型很重要(作为未命名接口的类型转换)。
如果模块导出字符串,如示例所示,声明可以像
一样简单export = '';