Ce face rewriteRelativeImportExtensions
Cu rewriteRelativeImportExtensions poți scrie importurile cu extensia reală ("./calcul.ts"), iar tsc le transformă în "./calcul.js" când generează JavaScript. Același cod sursă merge astfel în ambele feluri: rulat direct cu Node.js (node src/index.ts) și compilat în dist/.
Se rescriu doar căile relative (care încep cu ./ sau ../). Pentru importuri dinamice cu o cale calculată la rulare, tsc adaugă o funcție ajutătoare (__rewriteRelativeImportExtension) care face înlocuirea la rulare. Opțiunea permite automat importurile cu .ts, fără allowImportingTsExtensions. Implicit: false.
Parametri
| Parametru | Descriere |
|---|---|
true |
Extensiile .ts/.mts/.cts din importurile relative sunt rescrise la generare. |
false |
Valoarea implicită. |
Exemple
Exemplul 1: Același cod, rulat în două feluri
Importul din sursă are .ts; în dist/index.js devine .js. Ambele variante rulează și dau același rezultat.
// package.json
{ "type": "module" }
// tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"target": "es2022",
"rewriteRelativeImportExtensions": true,
"outDir": "dist"
}
}
// src/calcul.ts
export function cuTva(pret: number): number {
return Math.round(pret * 1.19 * 100) / 100;
}
// src/index.ts
import { cuTva } from "./calcul.ts";
console.log(cuTva(100));
Rezultat (tsc 5.9)
$ npx tsc && cat dist/index.js
import { cuTva } from "./calcul.js";
console.log(cuTva(100));
$ node dist/index.js
119
$ node src/index.ts
119
Exemplul 2: Import dinamic cu cale calculată
Calea este într-o variabilă, deci tsc nu o poate rescrie la compilare. Adaugă o funcție care o rescrie la rulare.
// src/index.ts
const fisier = "./calcul.ts";
const m = await import(fisier);
console.log(m.cuTva(100));
Rezultat (tsc 5.9)
$ npx tsc && cat dist/index.js
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
if (typeof path === "string" && /^\.\.?\//.test(path)) {
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
});
}
return path;
};
const fisier = "./calcul.ts";
const m = await import(__rewriteRelativeImportExtension(fisier));
console.log(m.cuTva(100));
export {};
Greșeli frecvente
- Să te aștepți ca opțiunea să rescrie și căile din
pathssau din pachete. Rescrie doar căile relative.
Comenzi înrudite
allowImportingTsExtensions: Permite importuri cu extensia .ts („./calcul.ts”), când codul este rulat direct de Node.js, Deno, Bun sau de un bundler.erasableSyntaxOnly: Interzice construcțiile TypeScript care generează cod (enum, namespace, parametri-proprietate), ca Node.js să poată rula direct fișierele .ts.module: Alege formatul de module din JavaScript-ul generat (ES modules, CommonJS) și regulile de import pe care le verifică tsc.outDir: Directorul în care tsc scrie fișierele generate, cu aceeași structură de subdirectoare ca sursele.