これが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()
。