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înCalcul.ts) pe macOS/Windows. Git poate să nu observe schimbarea; foloseștegit 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).