可以Typescript导入CommonJS模块

Can Typescript import CommonJS Modules?

本文关键字:模块 CommonJS 导入 Typescript 可以      更新时间:2024-04-13

我有这个文件:

//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"文件,目的是让typescript了解我导入函数的类型:

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

运气不好。

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

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

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

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

import * as d3 from "d3";

我无法对任何其他模块(jquery、box2d、box2d-commonjs等)进行同样的操作,也无法对我自己的库进行如上所述的操作。我是打字的新手,所以我可能错过了一些非常明显的东西,但我还没能自己弄清楚。

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

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

尽管如此,我仍然不明白为什么d3有效,而其他库则无效。