TypeScript 模块

2024-04-13

我想知道是否有可能以某种方式将两个或多个文件中的两个或多个类添加到 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 { }
        }
    }
}

可能会有几十个 GUI 类,因此将它们全部放在同一个文件中是不可能的。我的所有课程都将位于“mylib”模块中。 但我该怎么做呢?

If the module mylib {...}被翻译成一个函数然后所有的内容mylib所有文件中的块应包含在同一函数中。

这是可能吗?

当我编译时我得到这个:

$ tsc src/gui/button.ts 
src/gui/button.ts(4,39): The name 'UIElement' does not exist in the current scope

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

var mylib;
(function (mylib) {
    var Button = (function () {
        function Button(x) {
            this.x = x;
        }
        return Button;
    })();
    mylib.Button = Button;    
})(mylib || (mylib = {}));

如果你看最后一行(})(mylib || (mylib = {}));)你看到它实例化了一个新对象(mylib = {})仅当现有变量为 false(或计算结果为 false 的变量,如 null)时。 这样,所有名称相同的“模块”将被合并到同一个对象。

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

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

module mylib.gui {
}

代替

module mylib {
    module gui {
    }
}

我将尝试调查为什么会发生这种情况,据我阅读规范,两种方式应该是相同的。

更新:如果嵌套引用的模块被标记为导出,则它可以工作:

module mylib {
    export module gui {
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 模块 的相关文章

  • Typescript深度替换多种类型

    我将 mongodb 与 types mongodb 一起使用 这为我提供了一个很好的 FilterQuery 接口 用于我的 mogodb 查询形状文档集合 在我的域对象类中 我有一些额外的逻辑 例如将日期转换为时刻对象或将浮点数转换为
  • React 测试库:测试属性/prop

    我正在使用 TypeScript 编写一个 React 应用程序 我使用material ui作为我的组件 使用react testing library作为我的单元测试 我正在为 Material ui 的 Grid 组件编写一个包装器
  • 如何使用我自己的声明文件解决“无法找到模块的声明文件”错误?

    我有一个测试项目 正在其中测试类型定义文件 该项目有一个文件名为index ts看起来像这样 import i18nFu require gettext js The 获取文本 js包是使用 Node js 安装的 如下所示 npm ins
  • 如何向 ionic 2 警报添加禁用按钮

    我创建了一个 ionic2 警报 我必须根据条件禁用按钮 这是我的代码的简单结构 import AlertController from ionic angular export class MyPage constructor publi
  • 验证来自两个不同 URL 的 Keycloak 令牌

    我有一个Docker compose具有后端和前端组件的基于系统 后端写的是Python Flask并在多个 docker 容器中运行 前端编写为TypeScript with Angular 前端通过Restful API与后端进行通信
  • 如何在 redux-toolkit 中正确使用 PayloadAction 和元类型?

    简化示例 import createSlice PayloadAction from reduxjs toolkit type Cake flavor string size S M L const initialState all Cak
  • 您似乎不依赖于“@angular/core”。打字稿

    我尝试在 npm start 运行命令 但收到消息 您似乎不依赖于 angular core 这是一个错误 可能是什么原因 正如它在控制台中所写 npm angular core v 它得到 5 4 2 我的package json dep
  • 无法从函数内部访问数组变量

    我对 TypeScript 和量角器非常陌生 希望将从下拉列表中提取的所有值放入数组中 以便我可以从另一个页面验证它 export class AdditionalCostPage extends BasePage getAllUsageC
  • 避免在react + typescript中使用通用函数类型

    我正在寻找一条规则来阻止使用 函数 作为类型 myMethod Function 我没有找到任何东西 所以我愿意接受建议 您可以使用 typescript eslint ban types rule 规则链接 https github co
  • Typescript:声明与另一个变量具有相同类型的变量

    有没有办法用另一个变量的类型来声明一个变量 例如 我声明一个具有某种类型的类成员 然后我想在同一类型的函数中声明另一个变量 但我不想修改原来的声明 也不想重复它 看起来你应该能够做类似的事情 class Foo bar key string
  • Typescript 使用装饰器获取参数值

    如何访问装饰器中方法参数的值 export const NullParameterCheck target Object key string index number gt how to get the value of the mark
  • 检查类型是否为未知类型

    有没有办法检查类型参数T事实上是unknown type 我知道可以检查any 解决方案在这里 https stackoverflow com a 55541672 11153160 但想知道unknown 最简单的解决方案是这样的 typ
  • 模板文字类型打字稿重复

    是否可以使用模板文字类型构建重复 例如 type Hex a b c type Id Hex Hex Here I want to say Id is N hex long 原则上 这可以通过 TS 4 1 中的递归条件类型实现 type
  • TypeScript 出现错误 TS2304:找不到名称“require”

    我正在尝试启动并运行我的第一个 TypeScript 和 DefinelyTyped Node js 应用程序 但遇到了一些错误 当我尝试转译简单的 TypeScript Node js 页面时 收到错误 TS2304 找不到名称 requ
  • 在 TypeORM 单表继承中更新实体的类型

    有没有办法将继承实体的类型 在数据库中 更改为不同的实体类型 转换实体为uid from OldType to NewType await em update OldType uid uid entityTypeColumnName New
  • TypeScript GUID 类? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道在 TypeScript 中像 GUID UUID 这样的 C 的良好 可靠的实现吗 我自己可
  • 编写一个带有导入子路径打字稿选项的包

    我写了一个包让我们称之为commons以及导入它的另一个项目 我不想导入整个包 而只想导入该包的一个子路径 import client from commons clients 代替import client from commons 我见
  • 如何在Vite配置中更改antd主题?

    是一个由Vite和React antd组成的项目 我想在 vite config ts 中动态处理 antd 主题 如果您能告诉我如何修改 React 组件中的 less modifyVars 值 我将不胜感激 这是当前屏幕 光状态 htt
  • Angular2 找不到命名空间“google”

    我正在与angular2 google maps以及最新版本的 Angular2 我正在尝试将一些本地地图组件功能转换为自己文件中的服务maps service ts 例如 地图组件 ts getGeoLocation lat number
  • Karma 与 Webpack 和 Typescript 不执行任何测试

    我试图弄清楚如何将 Karma 测试运行器与 Webpack 和 Typescript 源文件一起使用 以此源文件作为唯一的测试文件为例 测试规格 var message string yay alert message describe

随机推荐