Typescript 可以导入 CommonJS 模块吗?
Can Typescript import CommonJS Modules?
我有这个文件:
//foo.js
var foo = function () {
return "foo";
};
module.exports = foo;
所以,我想将它导入到我的 Typescript 文件中。我试过这个
//typescript.ts
import * as foo from ("./foo");
没用。我读到了这个 'ambient' 模块,所以我添加了这个
//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 的新手,所以我可能遗漏了一些非常明显的东西,但我自己却无法弄清楚。
事实证明这很明显:您必须使用 --allowJs
选项。这对我有用:
tsc --moduleResolution "node" --module "commonjs" --allowJs main.ts
尽管如此,我仍然不明白为什么 d3 可以工作而其他库没有。
我有这个文件:
//foo.js
var foo = function () {
return "foo";
};
module.exports = foo;
所以,我想将它导入到我的 Typescript 文件中。我试过这个
//typescript.ts
import * as foo from ("./foo");
没用。我读到了这个 'ambient' 模块,所以我添加了这个
//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 的新手,所以我可能遗漏了一些非常明显的东西,但我自己却无法弄清楚。
事实证明这很明显:您必须使用 --allowJs
选项。这对我有用:
tsc --moduleResolution "node" --module "commonjs" --allowJs main.ts
尽管如此,我仍然不明白为什么 d3 可以工作而其他库没有。