为什么打字稿无法导入模块?

时间:2016-02-10 17:22:43

标签: node.js typescript typescript1.7

Typescript无法导入js-yaml包。它实际上正在为我提供更多包,但这是重现问题的简单方法。

在新目录中,键入:

npm install js-yaml

然后在同一目录中添加以下ts文件:

import * as y from 'js-yaml';
console.log(y);

使用此命令编译时:

$ tsc --version
message TS6029: Version 1.7.5
$ tsc --module commonjs file.ts 
file.ts(2,20): error TS2307: Cannot find module 'js-yaml'.

如果我将导入样式更改为commonjs,就像这样:

declare var require: any;  // need to declare require, or else tsc complains
let y = require('js-yaml');
console.log(y);

所有人都快乐地编译。此外,我看到即使tsc编译失败,它也会输出一个文件。在此文件中,与正确编译的版本完全相同的require调用:

var y = require('js-yaml');
console.log(y);

这是一个错误,还是我在做一些愚蠢的事情?

1 个答案:

答案 0 :(得分:1)

我很傻。在Typescript gitter room的帮助下,我意识到我错过了打字文件。所以,我跑了这个:

tsd install js-yaml

然后在ts文件的顶部添加了typings引用,如下所示:

/// <reference path="./typings/js-yaml/js-yaml.d.ts"/>
import * as y from 'js-yaml';
console.log(y);

编译工作正常。