paths în TypeScript

Definește prescurtări pentru importuri (de exemplu "@/utile/calcul" pentru ./src/utile/calcul) folosite la verificarea tipurilor.

Sintaxă
"compilerOptions": {
  "paths": {
    "@/*": ["./src/*"]
  }
}

Ce face paths

paths este o listă de reguli „import scris → unde să caute tsc”. Cheia poate avea o singură steluță ("@/*"), iar valoarea este o listă de căi în care steluța este înlocuită cu restul importului. Cu "@/*": ["./src/*"], importul "@/utile/calcul.js" este căutat în ./src/utile/calcul.js (adică calcul.ts).

Ca la baseUrl, tsc nu rescrie importurile în JavaScript-ul generat. Prescurtările funcționează când un bundler (Vite, webpack, esbuild) are aceleași reguli, sau când folosești în schimb câmpul imports din package.json ("#utile/*"), pe care Node.js îl înțelege.

Fără baseUrl, căile din paths sunt relative la fișierul tsconfig.json (de la TypeScript 4.1). Nu are valoare implicită.

Parametri

Parametru Descriere
"tipar": ["cale", ...] Tiparul importului (cu cel mult o *) și locurile în care se caută, în ordine.

Exemple

Exemplul 1: Prescurtarea @/

Fără paths, tsc dă eroarea TS2307 pentru "@/util/calcul.js". Cu paths trece, dar fișierul generat păstrează importul neschimbat, deci trebuie un bundler care să-l înțeleagă.

// tsconfig.json
{
  "compilerOptions": {
    "module": "nodenext",
    "outDir": "dist",
    "paths": {
      "@/*": ["./src/*"]
    }
  }
}

// src/util/calcul.ts
export function cuTva(pret: number): number {
  return Math.round(pret * 1.19 * 100) / 100;
}

// src/pagini/cos.ts
import { cuTva } from "@/util/calcul.js";
console.log(cuTva(250));

Rezultat (tsc 5.9)

$ npx tsc && cat dist/pagini/cos.js
import { cuTva } from "@/util/calcul.js";
console.log(cuTva(250));

Exemplul 2: Aceeași prescurtare, fără paths

Pachetul @/util nu există în node_modules, deci importul nu poate fi găsit.

// tsconfig.json
{
  "compilerOptions": {
    "module": "nodenext",
    "noEmit": true
  }
}

Rezultat (tsc 5.9)

$ npx tsc
src/pagini/cos.ts(1,23): error TS2307: Cannot find module '@/util/calcul.js' or its corresponding type declarations.

Greșeli frecvente

  • Să te aștepți ca tsc să transforme "@/util/calcul.js" în cale relativă. Nu o face; rularea cu Node.js dă ERR_MODULE_NOT_FOUND.
  • Să definești regulile doar în tsconfig și să uiți de configurația bundlerului sau a testelor (Vitest, Jest). Trebuie să fie aceleași în ambele locuri.

Comenzi înrudite

  • baseUrl: Directorul față de care tsc caută importurile fără ./ (de exemplu „utile/calcul”); nu schimbă JavaScript-ul generat.
  • moduleResolution: Alege regulile după care tsc găsește fișierul din spatele unui import („./calcul.js”, „react”, „@/utile”).
  • resolvePackageJsonExports: Folosește câmpurile exports și imports din package.json la rezolvarea importurilor de pachete și a celor cu #.
  • rootDirs: Tratează mai multe directoare ca pe unul singur la rezolvarea importurilor relative (pentru cod generat separat).