javascript - Typescript 可以导入 CommonJS 模块吗?

标签 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”文件,目的是让 typescript 知道我导入的函数的类型:

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 可以工作而其他库却不能。

关于javascript - Typescript 可以导入 CommonJS 模块吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36511233/

相关文章:

javascript - 如何防止 iframe 访问父窗口但允许父窗口访问 iframe 文档?

javascript - js : trigger a timing event after pause/resume

javascript - 在 Angular.js 中访问 9gag API

d3.js - 使用 d3.js 将 x 轴移动到图表上的坐标 (0,0)

TypeScript 默认常量导出

javascript - Typescript 编译即使有错误,TS2304

javascript - 如何在模态 Bootstrap 中添加容器和图像

javascript - D3.js 循环对象数组

javascript - 我收到以下错误...[未捕获 InvalidCharacterError : Failed to execute 'setAttribute' on 'Element' : '0' is not a valid attribute name

node.js - 得到错误 TS2304 : Cannot find name 'Buffer'