4

これが2つの骨抜きのサンプルファイルです。これは現在、requirejsモジュールとして機能する方法です。エクスポートをAPIとして定義するために、requireconfigでapi.jsをシムしました。目標は、これらがシングルトンのままになることです。私はそれらをTypeScriptの同等のものに変換しようとしていますが、それらをシングルトンとして保持し、現在のようにさまざまなモジュールに渡す方法を完全に理解することはできません。

RequireJSスタイル

api.js

(function (global) {

    var API = global.API = {};
    API.version = '0.0.1';
    API.env = 'local';
    API.header = '';

} (this));

auth.js

define([
    'api',
], function (api) {
        'use strict';

        CommonAuth = {

            maxExpiredAuthorizationRetries: 1,

            getAuthorizationHeader: function () {
                return api.header;
            },

            setAuthorizationHeader: function (val) {
                api.header = val;
            }

        };

        return CommonAuth;

    }
);

TypeScript / AMD(requirejs)スタイル

私はこれまでに次のものを持っていますが、これは明らかに私が求めているものではありません。

auth.ts

// don't know how to fake this without creating a valid api module. requirejs shim is what handles my export
import api = module("api");

export module Common {

    class Auth {

        public maxExpiredAuthorizationRetries: number;

        constructor (maxExpiredAuthorizationRetries: number) {
            this.maxExpiredAuthorizationRetries = maxExpiredAuthorizationRetries;
        }

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

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

    var auth = new Auth(1);
}

auth.jsにコンパイルされます(tsc auth.ts --module amd

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 {

そして、import api = module('api');言うだけで使用できますapi.getAuthorizationHeader()

4

1 に答える 1

3

シングルトンを探しているなら、私はクラスで静的メンバーを使用します。このようなもの:

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;
    }
}
于 2012-10-20T02:37:57.183 に答える