tipuri pentru Node.js în TypeScript

Tipurile pentru modulele Node.js (fs, path, process...) vin din pachetul @types/node.

Sintaxă
npm install --save-dev @types/node
import { readFileSync } from "node:fs";
process.argv; process.env.NUME;

Ce face tipuri pentru Node.js

TypeScript nu conține tipurile pentru Node.js; ele sunt în pachetul @types/node, instalat ca dependență de dezvoltare. După instalare, ai tipuri pentru modulele incluse (node:fs, node:path, node:http, node:crypto…), pentru process, Buffer și pentru globalele Node.js. Alege versiunea pachetului apropiată de versiunea Node.js pe care rulezi.

Opțiunea types din tsconfig controlează ce pachete @types sunt incluse automat ("types": ["node"]). Pentru module ES în Node.js, folosește "module": "nodenext"; prefixul node: în importuri face clar că este un modul inclus în Node.js.

Câteva tipuri de reținut: process.env.X are tipul string | undefined (variabila poate lipsi), process.argv este string[], iar erorile de sistem au tipul NodeJS.ErrnoException, cu proprietatea code ("ENOENT"…). Din Node.js 23, fișierele .ts pot rula direct (Node.js doar șterge tipurile, fără să le verifice).

Exemple

Exemplul 1: Fișiere, căi și variabile de mediu

import { writeFileSync, readFileSync, existsSync } from "node:fs";
import { join } from "node:path";

const fisier = join(".", "elevi.csv");
writeFileSync(fisier, "nume,nota\nAna,10\nMihai,9\n", "utf8");

const randuri = readFileSync(fisier, "utf8").trim().split("\n").slice(1);
const note = randuri.map((r) => Number(r.split(",")[1]));
console.log(existsSync(fisier), note, note.reduce((s, n) => s + n, 0) / note.length);

const port: string | undefined = process.env.PORT_INEXISTENT;
console.log("port:", port ?? "3000 (implicit)", "| argumente:", process.argv.length >= 2);

Rezultat

true [ 10, 9 ] 9.5
port: 3000 (implicit) | argumente: true

Exemplul 2: Eroare de sistem cu cod

import { readFileSync } from "node:fs";

try {
    readFileSync("nu-exista.txt", "utf8");
} catch (e) {
    const err = e as NodeJS.ErrnoException;
    console.log(err.code, err.syscall);
}

Rezultat

ENOENT open

Exemplul 3: process.env poate lipsi

const port: string = process.env.PORT;
console.log(port);

Eroarea afișată de tsc

exemplu.mts(1,7): error TS2322: Type 'string | undefined' is not assignable to type 'string'.
  Type 'undefined' is not assignable to type 'string'.

Greșeli frecvente

  • Uiți să instalezi @types/node. tsc dă Cannot find module ‘node:fs’ or its corresponding type declarations sau Cannot find name ‘process’.
  • Folosești process.env.PORT! fără verificare. Dacă variabila lipsește, primești undefined la rulare; dă o valoare implicită cu ??.

Comenzi înrudite

  • tipuri pentru DOM: Tipurile pentru pagina web (document, elemente, evenimente) vin din biblioteca dom a TypeScript.
  • module și import/export: Fiecare fișier cu import sau export este un modul; exporți funcții, clase și tipuri și le imporți în alte fișiere.
  • fișiere .d.ts: Fișiere care conțin doar tipuri: descriu codul JavaScript ca să poată fi folosit din TypeScript cu verificare.
  • async/await cu tipuri: O funcție async returnează mereu Promise<T>; await scoate valoarea de tip T din Promise.
  • types: Alege exact ce pachete de tipuri globale (din node_modules/@types) se încarcă automat; [] nu încarcă niciunul.