打字稿在被两个不同文件引用时无法找到外部模块

时间:2015-03-04 00:56:54

标签: node.js typescript commonjs

我可能会遗漏一些明显的东西,但是针对commonjs的Typescript模块解析器没有按预期工作。

给出以下目录结构和文件:

./first/shared.ts
./first/second/class_a.ts
./first/second/class_b.ts
./third/class_c.ts

其中:

  • class_a参考shared.ts
  • class_b引用class_a.ts和class_c.ts
  • class_c引用shared.ts

具体做法是:

shared.ts:
class Shared{}
export = Shared;

class_a.ts:
import Shared = require('../shared');
class A{}
export = A;

class_b.ts:
import A = require('./class_a');
import C = require('../../third/class_c');
class B {}
export = B;

class_c.ts:
import Shared = require('../first/shared');
class C {}
export = C;

除了class_b.ts之外的所有编译,使用以下编译器调用:

tsc --module commonjs class_a.ts

编译class_b.ts失败,并显示无法找到shared.ts:

的错误
../../third/class_c.ts(1,25): error TS2307: Cannot find external module '../first/shared'.

请注意,如果在class_b.ts中反转导入顺序,则会出现其他错误:

class_a.ts(1,25): error TS2307: Cannot find external module '../shared'.

似乎编译器在第一次导入时找到shared.ts,但不是第二次。

我正在使用tsc 1.4.1.0。

我想念的任何明显的东西,在这里?

1 个答案:

答案 0 :(得分:3)

我可以验证这是确实一个错误:

C:\Users\basaratsyed\Downloads\ts\fancyimport\first\second>node "C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.4\tsc.js" --module commonjs class_b.ts
../../third/class_c.ts(1,25): error TS2307: Cannot find external module '../first/shared'.

据说它没有出现在语言服务API 中,例如 atom-typescript 这可能就是为什么还没有被报道的原因:

enter image description here

注意:我已在此处报告:https://github.com/Microsoft/TypeScript/issues/2193