Typescript 以正确的方式导入命名空间
如何使用与当前文件命名空间相同或不同的命名空间中的类 目前我有以下2个文件。 类型A.ts:Typescript 以正确的方式导入命名空间,typescript,Typescript,如何使用与当前文件命名空间相同或不同的命名空间中的类 目前我有以下2个文件。 类型A.ts: export namespace Game { @ccclass export class TypeA extends cc.Component { protected onLoad(): void { // do something } }} declare global { namespace Game { class TypeA exte
export namespace Game {
@ccclass
export class TypeA extends cc.Component {
protected onLoad(): void {
// do something
}
}}
declare global {
namespace Game {
class TypeA extends cc.Component {
onLoad(): void;
}
}
}
Game.TypeA = <any>function(this: Game.TypeA) {
// constructor
};
Game.TypeA.prototype.onLoad = function() {
// do something
};
B.ts类型:
import * s from "some url";
export namespace Game {
@ccclass
export class TypeB extends s.Game.TypeA {
protected onLoad(): void {
// do something
}
}}
正如您所看到的导入部分,vscode说“As”是预期的,但目前我可以输入任何字符串,并且它以某种方式工作。
B型延伸部分看起来又丑又长
既然TypeB和TypeA都有相同的名称空间,我怎样才能使它只是TypeB扩展了TypeA呢?
实际上,我计划在同一名称空间下放置大量的diff类/组件,我应该这么做吗?或者删除导出名称空间部分,让每个导出类更容易访问?就像任何其他类型的声明一样,如果两个名称相同的名称空间定义在相同的范围内,则它们只是“相同的名称空间”:全局或相同的父名称空间或外部模块。在您的示例中,有两个名为
Game
的不同名称空间,每个模块中有一个。如果要从两个模块添加到同一名称空间,可以在TypeA.ts中使用以下内容:
export namespace Game {
@ccclass
export class TypeA extends cc.Component {
protected onLoad(): void {
// do something
}
}}
declare global {
namespace Game {
class TypeA extends cc.Component {
onLoad(): void;
}
}
}
Game.TypeA = <any>function(this: Game.TypeA) {
// constructor
};
Game.TypeA.prototype.onLoad = function() {
// do something
};
声明全局{
名称空间游戏{
类TypeA扩展了cc.Component{
onLoad():void;
}
}
}
Game.TypeA=函数(此:Game.TypeA){
//建造师
};
Game.TypeA.prototype.onLoad=函数(){
//做点什么
};
同样的,B.ts类型。如您所见,这变得非常糟糕,因为
declare global
只能包含声明,而实现必须单独修补。您最好按照Cerberus的建议选择名称空间或外部模块。为什么第一部分同时需要导出和名称空间?这是两种不同的代码结构方式,我建议选择其中一种。