класс машинописи и иерархия имен при выполнении импорта - PullRequest
0 голосов
/ 16 мая 2018

У меня есть вопрос о конфликте имен, но он не вызвал никаких ошибок и, по-видимому, предварительно экспортирует данные за пределы области.Лучший способ показать это в этом упрощенном коде;

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 импортируется сюда?Из того, что я могу сказать, это класс импортировать.

Я прочитал этот вопрос о стеке и этот вопрос о стеке , но они на самом деле не касаются того, что, если у нас есть класс и пространство имен, которые имеют одно и то же имя, и существуетв том же файле.Который получает экспорт?

1 Ответ

0 голосов
/ 16 мая 2018

Экспорт класса будет переопределен пространством имен , если пространство имен не пустое:

export class Foo { }

export namespace Foo {
    let bar;
}

Таким образом, оно сохраняется в выводе компилятора:

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;
}

Так что он удален из вывода компилятора:

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