TypeScript导入具有相同模块名称的多个文件

时间:2017-02-15 20:27:45

标签: typescript

虽然掌握了TypeScript的模块导入/导出系统,仍然躲避我,感觉就像一个黑暗的艺术只能由那些不能被命名的人掌握...... 我和#39;我试图了解如何使以下导入更清洁

B.ts

export module System {
    export class Bravo {
        constructor(n: number) {
            console.log(`Bravo ${n}`);
        }
    }
}

A.ts

import {System as System1} from "./B";

export module System {
    export class Alpha extends System1.Bravo {
        constructor() { 
            super(123);
        }
    }
}

我不喜欢这个

  • import { System as System1 }
  • extends System1.Bravo

对我来说,像拇指一样伸出来!有没有办法让它更清洁?

  • import { System.Bravo } from "./B";
  • extends Bravo

这样的东西?

作为旁注,我实际想要实现的是

  • 正确使用命名空间,即System.Foo.Bar.MyAwesomeClass
  • 将类分成自己的文件,以便构建不包含他们不需要的东西。
  • 关于上面,树摇晃?
  • 使用导出/导入作为管理依赖关系的机制。

1 个答案:

答案 0 :(得分:2)

这是一种不同的方法,但应该产生您正在寻找的相同结果。

您可以使用文件系统将所有文件放在带有System文件的联合模块中,而不是使用模块index.ts。所以有一个名为System的目录。所以做这样的事情:

/System/Bravo.ts

export default class Bravo {
  constructor(n: number) {
    console.log(`Bravo ${n}`);
  }
}

/System/Alpha.ts

import Bravo from "./Bravo"

export default class Alpha extends Bravo {
  constructor() { 
    super(123);
  }
}

然后包含一个包含两者的index.ts文件。

/System/index.ts

import Alpha from "./Alpha";
import Bravo from "./Bravo";

export { Alpha };
export { Bravo };

然后,无论何时您想要导入整个模块,您都可以:

import * as System from "<relativePath>/System";

let alphaClass = new System.Alpha();
let bravoClass = new System.Bravo(1);

同样,如果你只想要Alpha,那么你可以直接导入它:

import { Alpha } from "<relativePath>/System";

let alphaClass = new Alpha();