Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Module 类型脚本模块_Module_Typescript - Fatal编程技术网

Module 类型脚本模块

Module 类型脚本模块,module,typescript,Module,Typescript,我想知道是否有可能以某种方式将两个或多个文件中的两个或多个类添加到TypeScript中的同一模块中。大概是这样的: //src/gui/uielement.ts module mylib { module gui { export interface UIElement { public draw() : void; } } } //src/gui/button.ts ///<reference path='uie

我想知道是否有可能以某种方式将两个或多个文件中的两个或多个类添加到TypeScript中的同一模块中。大概是这样的:

//src/gui/uielement.ts
module mylib {
    module gui {
        export interface UIElement {
            public draw() : void;
        }
    }
}

//src/gui/button.ts
///<reference path='uielement.ts'/>
module mylib {
    module gui {
        export class Button implements UIElement {
            constructor(public str : string) { }
            draw() : void { }
        }
    }
}

这就是它的工作原理!如果查看生成的javascript代码,它将添加为一个匿名函数,接受一个对象“模块对象”:

如果查看最后一行(
})(mylib | |(mylib={})))您可以看到,仅当现有变量为false(或计算结果为false的某个变量,如null)时,它才会实例化新的ojbect(
mylib={}
)。 这样,命名相同的所有“模块”将合并到同一对象

因此,内部模块相互扩展。我必须注意,我还没有完全弄清楚嵌套模块会发生什么

更新:如果我不使用嵌套模块语法,而是将其更改为点语法,那么您的代码对我有效。e、 g:

module mylib.gui {
}
而不是

module mylib {
    module gui {
    }
}
我将尝试调查为什么会发生这种情况,就我所阅读的规范而言,这两种方式应该是平等的

更新:如果嵌套引用的模块标记为已导出,则该模块将工作:

module mylib {
    export module gui {
    }
}

是的,这是受支持的。不知道你为什么不试一下,我试过了。抱歉没有解释我得到的错误…将进一步描述。
module mylib {
    module gui {
    }
}
module mylib {
    export module gui {
    }
}