Ce face allowImportingTsExtensions
De obicei, în TypeScript scrii importul cu extensia fișierului generat: "./calcul.js". Uneltele care rulează direct fișiere .ts (Node.js 23.6+, Deno, Bun, Vite) au însă nevoie de numele real: "./calcul.ts". Cu allowImportingTsExtensions, tsc acceptă extensiile .ts, .mts, .cts și .tsx în importuri.
Opțiunea merge doar cu noEmit sau emitDeclarationOnly: tsc nu rescrie importurile, deci fișierele .js generate ar importa fișiere .ts (eroarea TS5096). tsc verifică doar tipurile, iar altă unealtă rulează codul. Dacă vrei și fișiere .js, folosește rewriteRelativeImportExtensions. Implicit: false.
Parametri
| Parametru | Descriere |
|---|---|
true |
Importurile pot avea extensia .ts/.mts/.cts/.tsx. Necesită noEmit sau emitDeclarationOnly. |
false |
Valoarea implicită; importul cu .ts dă TS5097. |
Exemple
Exemplul 1: Verificare cu tsc, rulare cu Node.js
tsc verifică tipurile (fără să scrie fișiere), iar Node.js rulează direct index.ts, eliminând tipurile la încărcare.
// package.json
{ "type": "module" }
// tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"allowImportingTsExtensions": true,
"noEmit": true
}
}
// calcul.ts
export function cuTva(pret: number): number {
return Math.round(pret * 1.19 * 100) / 100;
}
// index.ts
import { cuTva } from "./calcul.ts";
console.log(cuTva(100));
Rezultat (tsc 5.9)
$ npx tsc && node index.ts
119
Exemplul 2: Fără opțiune sau fără noEmit
Primul rezultat: același cod, cu noEmit, dar fără allowImportingTsExtensions. Al doilea: cu opțiunea, dar fără noEmit.
// tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"allowImportingTsExtensions": true
}
}
Rezultat (tsc 5.9)
$ npx tsc # fără allowImportingTsExtensions
index.ts(1,23): error TS5097: An import path can only end with a '.ts' extension when 'allowImportingTsExtensions' is enabled.
$ npx tsc # cu opțiunea, dar fără noEmit
tsconfig.json(4,35): error TS5096: Option 'allowImportingTsExtensions' can only be used when either 'noEmit' or 'emitDeclarationOnly' is set.
Greșeli frecvente
- Să folosești opțiunea și să publici fișiere
.jsgenerate de alt instrument care nu rescrie importurile. Ele vor importa.tsși nu vor merge.
Comenzi înrudite
rewriteRelativeImportExtensions: Rescrie importurile relative care se termină în .ts, .mts, .cts în .js, .mjs, .cjs în fișierele generate.erasableSyntaxOnly: Interzice construcțiile TypeScript care generează cod (enum, namespace, parametri-proprietate), ca Node.js să poată rula direct fișierele .ts.noEmit: tsc doar verifică tipurile și nu scrie niciun fișier (.js, .d.ts, .map).moduleResolution: Alege regulile după care tsc găsește fișierul din spatele unui import („./calcul.js”, „react”, „@/utile”).