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ť.

Súvisiace články