forceConsistentCasingInFileNames în TypeScript

Dă eroare când același fișier este importat cu litere mari și mici diferite ("./Calcul" și calcul.ts).

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

Ce face forceConsistentCasingInFileNames

Pe Windows și macOS, sistemul de fișiere nu face diferența între litere mari și mici: "./Calcul.js" găsește calcul.ts. Pe Linux (unde rulează de obicei serverele și CI-ul), nu îl găsește. Proiectul merge pe laptop și se strică la build.

Cu forceConsistentCasingInFileNames, tsc dă eroarea TS1149 când un fișier ajunge în program sub două scrieri diferite. Implicit: true (de la TypeScript 5.0). Nu are rost să o oprești.

Parametri

Parametru Descriere
true Valoarea implicită. Scrierile diferite ale aceluiași fișier dau eroare.
false Nu se verifică.

Exemple

Exemplul 1: Import cu literă mare

Fișierul este calcul.ts, iar importul scrie Calcul. Pe macOS, fișierul ar fi găsit, deci problema s-ar vedea abia pe Linux.

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

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

// index.ts
import { cuTva } from "./Calcul.js";
console.log(cuTva(100));

Rezultat (tsc 5.9)

$ npx tsc          # pe macOS
index.ts(1,23): error TS1149: File name '/proiect/Calcul.ts' differs from already included file name '/proiect/calcul.ts' only in casing.
  The file is in the program because:
    Matched by default include pattern '**/*'
    Imported via "./Calcul.js" from file '/proiect/index.ts'
  File is ECMAScript module because '/proiect/package.json' has field "type" with value "module"

Greșeli frecvente

  • Să redenumești un fișier doar schimbând literele (calcul.ts în Calcul.ts) pe macOS/Windows. Git poate să nu observe schimbarea; folosește git mv.

Comenzi înrudite

  • moduleResolution: Alege regulile după care tsc găsește fișierul din spatele unui import („./calcul.js”, „react”, „@/utile”).
  • explainFiles: Afișează fiecare fișier din compilare și motivul pentru care a fost inclus (include, import, lib, types).