打字稿外部模块可以有循环依赖吗?

Dav*_*len 15 module typescript

看起来这是不允许的.requireJS在以下内容上抛出一个错误(这个帖子不同,因为它是用内部模块解决的):

element.ts:

import runProperties = require('./run-properties');
export class Element {
   public static factory (element : IElement) : Element {

        switch (element.type) {
            case TYPE.RUN_PROPERTIES :
                return new runProperties.RunProperties().deserialize(<runProperties.IRunProperties>element);
        }
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

运行properties.ts:

import element = require('./element');

export class RunProperties extends element.Element implements IRunProperties {
}
Run Code Online (Sandbox Code Playgroud)

Wir*_*rie 25

不,模块不能具有循环依赖关系,除非它们位于同一文件中.每个文件都是按顺序同步处理的,所以当它转到第二个文件时,完整的文件定义(包括所有导出)都没有完成,第二个文件立即尝试要求/引用第一个文件,依此类推.

通常,您可以通过将接口或基类引入公共定义文件(仅基本上是接口)并让其他文件将其用作公共"接口"而不是直接引用类来打破循环依赖.这是许多平台中的典型模式.

  • 糟糕,这是一个主要的PITA.这促使我们将单个文件中的所有类都放在一个文件中,并且我不喜欢单个文件中包含许多类. (6认同)
  • 有没有办法让tsc从多个.ts文件构建一个.js文件? (2认同)
  • http://stackoverflow.com/questions/12926830/typescript-compiling-as-a-single-js-file?rq=1 - 但您仍然可以考虑按照我的建议以不同的方式创建它们.我在COM和.NET中使用了相同的模式.:) (2认同)