导入

时间:2018-05-16 11:51:31

标签: angular typescript hierarchy naming

我有一个关于名称冲突的问题,但没有引起任何错误,并且似乎通常导出到外部范围。展示的最佳方式是简化代码;

Endpoints.model.ts

namespace Endpoints {
 export class FruitWorld {
  apple: string;
  banana: string;
  seller: string;
  sellerId: string;
  get produceDate() {
   ...
  }
 }
}
export class FruitWorld extended Endpoints.FruitWorld {
 Seller: string;
 SellerId: string;
 get ProduceDate() {
  ...
 }
 constructor(...init: Partial<Endpoints.FruitWorld>[]) {
  super();
  init.map(data => {
   delete data.Apple;
   delete data.Banana;
   Object.assign(this, data);
  }
 }
}
export namespace FruitWorld {
 // Some overwrite function 
 // extended functionalities
}

app.ts

import { FruitWorld } "./Endpoints.model";

这是一个令人困惑的部分,其中一个FruitWorld是在这里导入的?据我所知,这是导入的类。

我读了这个stackover questionthis stackover question,但是如果我们有一个类和命名空间共享相同的名称并且存在于同一个文件中,它们并没有真正触及。哪个出口?

1 个答案:

答案 0 :(得分:4)

如果命名空间非空,则为类导出will be overridden by a namespace

var Foo = /** @class */ (function () {
    function Foo() {
    }
    return Foo;
}());
exports.Foo = Foo;
(function (Foo) {
    var bar;
})(Foo = exports.Foo || (exports.Foo = {}));
exports.Foo = Foo;

因此它在编译器输出中持续存在:

export class Foo { }

export namespace Foo {
    // let bar;
}

如果它是空的,则导出won't be overridden by a namespace

var Foo = /** @class */ (function () {
    function Foo() {
    }
    return Foo;
}());
exports.Foo = Foo;

所以它从编译器输出中删除了:

for (i=0; i < 10; i++) {
    mainColumnHeading.id = 1;
    mainColumnHeading.projectID = 2;
    mainColumnHeading.projectName = "project Name";
    tabulatorRowData.projectData.push(mainColumnHeading);
}
for (j=0; j < 10; j++) {
    tabulatorRowData.projectData[j].hours = j;
    tabulatorRowData.projectData[j].progress = j+20;
}