Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 以正确的方式导入命名空间_Typescript - Fatal编程技术网

Typescript 以正确的方式导入命名空间

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

如何使用与当前文件命名空间相同或不同的命名空间中的类

目前我有以下2个文件。 类型A.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
};
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的建议选择名称空间或外部模块。

为什么第一部分同时需要导出和名称空间?这是两种不同的代码结构方式,我建议选择其中一种。