导入时打字稿 class 和名称脚本层次结构
typescript class and namescript hierarchy when do importing
我有一个关于名称冲突的问题,但没有导致任何错误,而且似乎将 pre usual 导出到外部范围。最好的展示方式是在这个简化代码中;
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
中的哪一个?据我所知,它是 class 被导入的。
我读了这个 stackover question and ,但他们并没有真正触及如果我们有一个 class 和一个命名空间共享相同的名称,并且存在于同一个文件中。哪个出口?
Class export will be overridden by a namespace 如果命名空间非空:
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;
并且class导出won't be overridden by a namespace如果它是空的:
export class Foo { }
export namespace Foo {
// let bar;
}
因此它已从编译器输出中删除:
var Foo = /** @class */ (function () {
function Foo() {
}
return Foo;
}());
exports.Foo = Foo;
我有一个关于名称冲突的问题,但没有导致任何错误,而且似乎将 pre usual 导出到外部范围。最好的展示方式是在这个简化代码中;
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
中的哪一个?据我所知,它是 class 被导入的。
我读了这个 stackover question and
Class export will be overridden by a namespace 如果命名空间非空:
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;
并且class导出won't be overridden by a namespace如果它是空的:
export class Foo { }
export namespace Foo {
// let bar;
}
因此它已从编译器输出中删除:
var Foo = /** @class */ (function () {
function Foo() {
}
return Foo;
}());
exports.Foo = Foo;