Înțelegerea modulelor interne/externe și a importării/cererii în Typescript 0.8.2
Există numeroase întrebări pe StackOverflow care ating acest subiect, dar fie nu sunt exact ceea ce încerc eu, fie se referă la versiuni anterioare de TypeScript.
Lucrez la un proiect destul de mare în TypeScript și am un modul împărțit în mai multe fișiere, nu chiar câte unul pentru fiecare clasă.
În 0.8.0, asta a funcționat bine:
//* driver.ts *//
/// <reference path="express.d.ts"/>
/// <reference path="a.ts"/>
/// <reference path="b.ts"/>
.
//* a.ts *//
/// <reference path="driver.ts"/>
module m {
import express = module("express");
export class a {
A: m.b;
A2: express.ServerResponse;
}
}
.
//* b.ts *//
/// <reference path="driver.ts"/>
module m {
export class b {
B: number;
}
}
În 0.8.1, a trebuit să modific a.ts cu trucul export import:
//* a.ts *//
/// <reference path="driver.ts"/>
module m {
export import express = module("express");
export class a {
A: m.b;
A2: express.ServerResponse;
}
}
În versiunea 0.8.2, totuși, importurile nu mai pot fi în cadrul declarației modulului, așa că a.ts s-a schimbat astfel:
//* a.ts *//
/// <reference path="driver.ts"/>
import express = module("express");
module m {
export class a {
A: m.b;
A2: express.ServerResponse;
}
}
ceea ce acum dă o eroare deoarece a.ts nu vede extensia modulului din b.ts.
Ceea ce înțeleg:
- a.ts a devenit un modul extern, din cauza declarației import.
- eliminarea importului din a.ts permite ca a și b și modulul meu să se îmbine împreună fără probleme.
- schimbarea importului într-o declarație require pierde definițiile de tip din express.d.ts
Ceea ce nu înțeleg:
- Nu există cu adevărat nicio modalitate pentru mine de a evita acest lucru fără a îmbina toate fișierele mele de module împreună?
Îmi cer scuze dacă acest lucru a fost deja răspuns în altă parte -- doar trimiteți-mă acolo -- dar niciuna dintre celelalte probleme similare nu pare să răspundă definitiv la asta.
Răspuns #1
Asta este ceea ce înțeleg din situația ta.
Modulele tale...
Trebuie să denumești fișierul după modulul tău, așa că a.ts ar trebui de fapt să fie m.ts și ar trebui să conțină ceva de genul...
import express = module('express');
export class a {
A: b;
A2: express.ServerResponse;
}
export class b {
B: number;
}
Nu ar trebui să folosești declarațiile reference aici.
Când rulezi cod pe nodejs, nu poți de fapt să îți împarți codul în mai multe fișiere pentru că fișierul în sine este modulul tău - atunci când import m=module('m'); va căuta m.js. Ce poți face este să îți organizezi fișierele într-o structură de foldere.
import x = module('m/x'); // m/x.js
import y = module('m/y'); // m/y.js
