如何使用 Requirejs 在 Typescript 中使用 Modules/Classes

How to use Modules/Classes in Typescript with Requirejs

我正在尝试从 MS CRM 中开始使用 RequireJs,但我对如何将 RequireJS 与我当前的 TypeScript 文件一起使用感到困惑。

目前,CRM 中的每个表单都有自己的 Typescript 文件,看起来像这样:

// File Path .\_Contoso\scripts\Contact.ts
module Contoso {
    export class Contact {

        private static instance = new Contact();

        //#region Form Properties

        static fields = { }

        //#endregion Form Properties

        //#region onLoad / onSave

        static onLoad(): void {
            Contact.instance.onLoad();
        }

        private onLoad = (): void => { ...}

        static onSave(): void { Contact.instance.onSave(); }

        private onSave = (): void => { ... }

        //#endregion onLoad / onSave
    }
}

每个文件可能包含对一个或多个常见 files/classes:

的依赖
// File Path .\_Abc\scripts\CommonLib.ts
module ABC_Corp {
    export class CommonLib {
        ... 
    }
}

// File Path .\_Abc\scripts\RestLib.ts
module ABC_Corp {
    export class RestLib {
        ... 
    }
}


// File Path .\_Abc\scripts\RoleLib.ts
module ABC_Corp {
    export class RoleLib {
        ... 
    }
}

这些文件目前都存在于 VS 网站项目中。每当我保存 ts 文件时,它都会生成 JS,然后我将这些文件部署到 CRM。

现在,输入 RequireJS。由于 CRM 中唯一支持开始执行 JS 文件的挂钩是 "OnLoad" 和 "onSave" 事件,因此我创建了一个 Contoso.Require 文件,它将从 CRM OnLoad 函数调用中读取需要的配置, 然后在表单脚本上调用适当的 onLoad 方法。这一切都是为了加载主窗体 JS,并调用 onLoad 函数。我的问题是我必须在 CRM OnLoad 事件中定义所需的 JS 文件,而不是让每个文件都定义它需要哪些文件。如何定义每个 class/file 需要哪些文件?

rather than having each file define what files are required by it.

你还需要这样做。因为这将推动 排序

但现在不再使用 module(现在称为命名空间),而是使用 import/export 格式来使用 真正的模块.

更多

https://basarat.gitbooks.io/typescript/content/docs/project/modules.html