node.js - Správny spôsob, ako odkazovať na moduly z iných modulov v TypeScripte
Píšem modul pre NodeJS v Typescripte. Snažím sa spracovať požiadavku (ktorá by mala byť objektom IncomingMessage) pomocou tohto modulu.
/// <reference path="typings/node/node.d.ts"/>
module rateLimiter {
export function processRequest(req : http.IncomingMessage) : Boolean {
return false;
};
}
Keď sa snažím zabezpečiť, aby bol prichádzajúci parameter požiadavky req takou inštanciou, zistím, že nemôžem odkazovať na nič z modulu http. Myslím si: „dobre, takže ho musím importovať, pretože je to len alias“. Keď to však urobím, dostanem hlásenie „importné deklarácie v namespace nemôžu odkazovať na modul.“
/// <reference path="typings/node/node.d.ts"/>
module rateLimiter {
import http = require('http');//IMPORT DECLARATIONS IN A NAMESPACE CANNOT REFERENCE A MODULE
export function processRequest(req : http.IncomingMessage) : Boolean {
return false;
};
}
Takže skúšam niečo, čo sa zdá byť zlým rozhodnutím, importovať v globálnom rozsahu, len aby som dostal „nemôže skompilovať moduly, ak nie je zadaný parameter --module“
/// <reference path="typings/node/node.d.ts"/>
import http = require('http');//CANNOT COMPILE MODULES UNLESS --MODULE FLAG IS PROVIDED
module rateLimiter {
export function processRequest(req : http.IncomingMessage) : Boolean {
return false;
};
}
Mám pocit, že mi zásadne chýba, ako by sa mala takáto referencia robiť. Zdá sa mi, že by som nemal musieť importovať modul len preto, aby som použil definície zahrnuté v node.d.ts. Mohol by mi niekto objasniť túto záležitosť?
Odpoveď č. 1
Ak píšete modul, nič, čo napíšete, nie je v globálnom rozsahu - samotný súbor je modul a všetko v ňom je obmedzené na tento modul.
import http = require('http');
export function processRequest(req : http.IncomingMessage) : boolean {
return false;
};
V príklade vyššie je súbor rateLimiter.ts modul. http je importovaný do modulu rateLimiter.
Musíte kompilovať s modulovým príznakom - napríklad:
tsc --module commonjs rateLimiter.ts
Väčšina editorov a IDE poskytuje aj spôsob, ako to nastaviť.
