Javascript 需要.js singleton才能输入脚本

Javascript 需要.js singleton才能输入脚本,javascript,singleton,requirejs,typescript,Javascript,Singleton,Requirejs,Typescript,下面是两个淡化的示例文件。这就是它们目前作为requirejs模块的工作方式。我已经在require配置中填充了api.js,将导出定义为api。我们的目标是,这些人将保持单身。我正试图将它们转换为与TypeScript等价的类型,但我不太明白如何将它们作为一个单例保存,并像现在这样将它们传递给各个模块 RequireJS风格 api.js auth.js TypeScript/AMD(requirejs)风格 到目前为止,我已经做到了以下几点,但这显然不是我想要的 auth.ts 编译为aut

下面是两个淡化的示例文件。这就是它们目前作为requirejs模块的工作方式。我已经在require配置中填充了api.js,将导出定义为api。我们的目标是,这些人将保持单身。我正试图将它们转换为与TypeScript等价的类型,但我不太明白如何将它们作为一个单例保存,并像现在这样将它们传递给各个模块

RequireJS风格

api.js

auth.js

TypeScript/AMD(requirejs)风格

到目前为止,我已经做到了以下几点,但这显然不是我想要的

auth.ts

编译为auth.js(
tsc auth.ts--module amd

更新:除了接受的答案外,您还可以直接导出所有成员:

export var maxExpiredAuthorizationRetries: number = 1;
export function getAuthorizationHeader(): string { ...
export function setAuthorizationHeader(val: string): string {

然后
import api=module('api')可以简单地通过说
api.getAuthorizationHeader()

来使用。如果您要查找Singleton,我会在类中使用静态成员。大概是这样的:

在api.ts中

class Api {
    static version:string = '0.0.1';
    static header:string = '';
}

export = Api
在auth.ts中

import Api = module("api");

class Auth {

    //...

    public getAuthorizationHeader(): string {
        return Api.header;
    }

    public setAuthorizationHeader(val: string): void {
        Api.header = val;
    }
}

“api.api”皱着眉头——似乎AMD和TypeScript很难实现额外的层次结构(您可以从Typescript 0.9.0中避免此重定向。请参见:在“导出”部分中,答案中的代码已修改为使用Typescript 0.9.0导入模块的方式。
define(["require", "exports", "api"], function(require, exports, __api__) {
    var api = __api__;

    (function (Common) {
        var Auth = (function () {
            function Auth(maxExpiredAuthorizationRetries) {
                this.maxExpiredAuthorizationRetries = maxExpiredAuthorizationRetries;
            }
            Auth.prototype.getAuthorizationHeader = function () {
                return api.header();
            };
            Auth.prototype.setAuthorizationHeader = function (val) {
                api.header(val);
            };
            return Auth;
        })();        
        var auth = new Auth(1);
    })(exports.Common || (exports.Common = {}));

})
export var maxExpiredAuthorizationRetries: number = 1;
export function getAuthorizationHeader(): string { ...
export function setAuthorizationHeader(val: string): string {
class Api {
    static version:string = '0.0.1';
    static header:string = '';
}

export = Api
import Api = module("api");

class Auth {

    //...

    public getAuthorizationHeader(): string {
        return Api.header;
    }

    public setAuthorizationHeader(val: string): void {
        Api.header = val;
    }
}