Typescript可以导入CommonJS模块吗?

时间:2016-04-09 00:10:17

标签: javascript d3.js typescript1.8

我有这个文件:

//foo.js
var foo = function () {
    return "foo";
}; 

module.exports = foo;

所以,我想将它导入我的Typescript文件。我试过这个

//typescript.ts
import * as foo from ("./foo");

没用。我读到了这个'环境'模块,所以我添加了这个

//typescript.ts
/// <reference path="./foo.d.ts" />
import * as foo from ("./foo");

我在同一个文件夹中添加了一个“foo.d.ts”文件,其目的是让打字稿知道导入函数的类型:

declare module "foo" 
{
    function foo(): string
    export = foo;
}

没有运气。

我认为问题出在导入语法上(对于es6和commonjs模块,你不能使用相同的语法,对吧?)。所以我这样做了。

import foo = require("./foo");

正如您可能猜到的那样,这也不起作用。

当我将其作为具有npm install d3的节点模块安装并引用其d.ts文件时,我已成功导入d3并成功使用它。我用这段代码做了:

import * as d3 from "d3";

我无法对任何其他模块(jquery,box2d,box2d-commonjs等)以及我自己的库(如上所示)执行相同的操作。我是Typescript的新手,所以可能我错过了一些非常明显的东西,但我自己也无法弄明白。

1 个答案:

答案 0 :(得分:1)

事实证明这是非常明显的:你必须使用--allowJs选项。这对我有用:

tsc --moduleResolution "node" --module "commonjs"  --allowJs main.ts

尽管如此,我仍然无法弄清楚为什么d3会工作而其他图书馆却没有。