preserveSymlinks în TypeScript

Nu înlocuiește legăturile simbolice (symlink) cu calea lor reală la rezolvarea importurilor, ca node --preserve-symlinks.

Sintaxă
"compilerOptions": { "preserveSymlinks": true }

Ce face preserveSymlinks

În monorepo-uri și cu npm link, un pachet din node_modules este adesea o legătură simbolică spre alt director. Implicit, tsc (ca și Node.js) urmează legătura și folosește calea reală a fișierului. Același pachet, ajuns pe două căi, este astfel recunoscut ca fiind același.

Cu preserveSymlinks, tsc păstrează calea prin legătură, ca node --preserve-symlinks. Se folosește doar când și rularea folosește acest mod; altfel, tipurile pot ajunge duplicate. Implicit: false.

Parametri

Parametru Descriere
true Calea prin legătura simbolică este păstrată.
false Valoarea implicită: se folosește calea reală.

Exemple

Exemplul 1: Calea fișierului de tipuri

node_modules/culori este o legătură spre pachete/culori. Implicit, tsc folosește calea reală; cu --preserveSymlinks, folosește calea din node_modules (iar fișierul real apare separat, prins de include).

// pachete/culori/package.json
{ "name": "culori", "type": "module", "types": "./index.d.ts" }

// pachete/culori/index.d.ts
export declare const rosu: string;

// index.ts  (tsconfig: "module": "nodenext", "noEmit": true)
import { rosu } from "culori";
console.log(rosu);

Rezultat (tsc 5.9)

$ ln -s ../pachete/culori node_modules/culori
$ npx tsc --listFilesOnly
/proiect/pachete/culori/index.d.ts
/proiect/index.ts

$ npx tsc --listFilesOnly --preserveSymlinks
/proiect/node_modules/culori/index.d.ts
/proiect/index.ts
/proiect/pachete/culori/index.d.ts

Greșeli frecvente

  • Să pornești opțiunea fără motiv. Același pachet poate apărea de două ori, iar tipurile lui nu mai sunt compatibile între ele (erori de tipul „Type X is not assignable to type X”).

Comenzi înrudite

  • moduleResolution: Alege regulile după care tsc găsește fișierul din spatele unui import („./calcul.js”, „react”, „@/utile”).
  • --listFilesOnly: Afișează fișierele care fac parte din compilare; –listFilesOnly se oprește aici, –listFiles compilează și apoi le afișează.
  • traceResolution: Afișează pas cu pas cum găsește tsc fișierul din spatele fiecărui import; util la erori TS2307.