Skombinujte externé moduly s internými modulmi v TypeScript 0.9


Chcem zabudovať koreňové menné priestory do zostáv, ktoré sú externými modulmi.
Napríklad:

// File structure (every file is class or interface export)
Deferred/Deferred.ts
Deferred/Promise.ts
WebApp/ClassOne.ts
WebApp/ClassTwo.ts

Chcem to zostaviť na:

Deferred.js
WebApp.js

A oba tieto súbory sú moduly AMD, takže v Deferred.js (a WebApp.js) je niečo ako:

define("Deferred", [], function() {
    (function(Deferred){
        // Here is a definition of a module with submodules
    })(var Deferred || (Deferred = {}));

    return Deferred;
});

Ako to urobiť?

Odpoveď č. 1

Vytvorte súborovú štruktúru ako:

// File structure (every file is class or interface export)
Deferred/Deferred.ts
Deferred/Promise.ts
Deferred/index.ts
WebApp/ClassOne.ts
WebApp/ClassTwo.ts
WebApp/index.ts

Kde každý súbor index.ts importuje a znovu exportuje všetko z toho priečinka. napr. Deferred/index.ts:

import deferred_file = require('./Deferred');
export var deferred = deferred_file;
import promise_file = require('./Promise');
export var promise = promise_file;

Potom skompilujte tento index.ts s príznakom amd a minimalizujte pomocou r.js: http://requirejs.org/docs/optimization.html

PS: V grunt-ts sa pracuje na vytváraní týchto súborov index.ts pre vás: https://github.com/grunt-ts/grunt-ts/pull/69, na ktorých môžete pracovať, ak chcete.