Classe TypeScript per file nello stesso namespace in Node.js
Qual è il modello per una classe per file quando più classi (e quindi più file) contribuiscono allo stesso namespace? Lo chiedo specificamente in un contesto Node.js.
So come definire una classe per file nello stesso namespace:
foo/A.ts:
module foo {
export class A {
}
}
foo/B.ts:
module foo {
export class B {
}
}
main.ts:
/// <reference path="./foo/A.ts"/>
/// <reference path="./foo/B.ts"/>
// TODO: How do I import the foo namespace at runtime?
TypeScript è supposibilmente un linguaggio per lo sviluppo di JavaScript su scala applicativa, eppure sembra che siamo lasciati al freddo sull'aspetto più fondamentale dello sviluppo su scala applicativa, che è come distribuire e strutturare i file di codice e come tutto sia collegato insieme durante l'esecuzione.
Risposta n. 1
In nodejs, ogni file è un modulo. Quando scrivi codice per nodejs, utilizzare module (quello che typescript chiama moduli interni) non è necessario.
Il foo nel file A è in realtà A.foo, e il foo nel file B è in realtà B.foo. Questo è il modo in cui funziona Node.js. Typescript segue ciò che è convenzionale in Node.js.
Ulteriori informazioni sui moduli esterni vs. interni: http://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1
PS riguardo a:
aspetto più fondamentale dello sviluppo su scala applicativa
È fondamentale nel browser, non in nodejs. Non esiste un ambito globale in nodejs come c'è nel browser.
Risposta n. 2
Come menziona Basarat, in Node.js i file sono moduli. Il modo corretto di scrivere il codice su cui stai lavorando è:
foo/A.ts:
class A {
}
export = A;
foo/B.ts:
class B {
}
export = B;
main.ts:
import A = require('./foo/A');
import B = require('./foo/B');
Questo è dettagliato nella sezione Importazioni ed Esportazioni de La Guida Definitiva a TypeScript.
