这个问题是我昨天问过的与Why is typescript failing to import a module?有关的问题。初始设置是一样的。
我有一个简单的打字稿文件,如下所示:
/// <reference path="./typings/js-yaml/js-yaml.d.ts"/>
'use strict';
import * as y from 'js-yaml';
console.log(y);
当我像tsc --module commonjs file.ts
那样进行编译时,打字稿很高兴。
但是,当我将///引用移到'use strict'下面时,就像这样:
'use strict';
/// <reference path="./typings/js-yaml/js-yaml.d.ts"/>
import * as y from 'js-yaml';
console.log(y);
打字稿不开心:
$ tsc --module commonjs file.ts
file.ts(4,20): error TS2307: Cannot find module 'js-yaml'.
Typescript确实输出了一个编译文件,它与最初输出的文件相同,当然除了///引用在第二种情况下是'use strict'之后。
这里发生了什么?
答案 0 :(得分:4)
答案 1 :(得分:1)
在TypeScript specification中有关于<reference>
标记的说明:
在{之前}发生的
/// <reference path="…"/>
形式的评论 源文件中的第一个标记会在源文件中添加依赖项 在path参数中指定。该路径相对于 包含源文件的目录。
答案 2 :(得分:1)
参考指令必须位于文件的顶部。当他们不在顶端时,他们会被忽略。这会导致模块解析失败,因为否则编译器不知道在其他随机文件夹中查找js-yaml
模块的定义。
限制的原因只是性能:它实际上非常慢(我们试过!)尝试解析文件中的每个注释,看它是否是引用指令。