Typescript可以导入CommonJS模块吗?

Fed*_*ico 8 javascript d3.js typescript1.8

我有这个文件:

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

module.exports = foo;
Run Code Online (Sandbox Code Playgroud)

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

//typescript.ts
import * as foo from ("./foo");
Run Code Online (Sandbox Code Playgroud)

没工作.我读到了这个'环境'模块,所以我添加了这个

//typescript.ts
/// <reference path="./foo.d.ts" />
import * as foo from ("./foo");
Run Code Online (Sandbox Code Playgroud)

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

declare module "foo" 
{
    function foo(): string
    export = foo;
}
Run Code Online (Sandbox Code Playgroud)

没运气.

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

import foo = require("./foo");
Run Code Online (Sandbox Code Playgroud)

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

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

import * as d3 from "d3";
Run Code Online (Sandbox Code Playgroud)

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

Fed*_*ico 5

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

tsc --moduleResolution "node" --module "commonjs"  --allowJs main.ts
Run Code Online (Sandbox Code Playgroud)

尽管如此,我仍然无法弄清楚为什么 d3 可以工作而其他库却没有。