importsNotUsedAsValues în TypeScript

tsconfig: opțiuni scoase (compatibilitate) TypeScript 3.8 (scoasă în 5.5)

Opțiuni scoase din TypeScript 5.5 care controlau păstrarea importurilor; înlocuite de verbatimModuleSyntax.

Sintaxă
// scoase; în locul lor:
"compilerOptions": { "verbatimModuleSyntax": true }

Ce face importsNotUsedAsValues

Opțiunea face parte din „Backwards Compatibility”: a fost marcată ca depreciată în TypeScript 5.0 și scoasă în TypeScript 5.5. În tsc 5.9, prezența ei în tsconfig.json dă eroarea TS5102, iar "ignoreDeprecations": "5.0" nu mai ajută. Șterge-o din configurație.

importsNotUsedAsValues (remove, preserve, error) decidea ce se întâmplă cu un import folosit doar pentru tipuri: șters, păstrat pentru efectele lui sau raportat ca eroare. preserveValueImports păstra în JavaScript importurile de valori nefolosite. Amândouă rezolvau, pe bucăți, aceeași problemă, iar combinațiile lor erau greu de înțeles.

verbatimModuleSyntax le înlocuiește cu o singură regulă: importurile scrise fără type rămân în JavaScript, iar cele cu import type dispar. Mesajul erorii TS5102 sugerează chiar această opțiune.

Parametri

Parametru Descriere
importsNotUsedAsValues Scoasă. Valorile remove/preserve/error nu mai sunt acceptate.
preserveValueImports Scoasă.

Exemple

Exemplul 1: Eroarea în tsc 5.9

Ambele opțiuni dau eroare, iar tsc sugerează înlocuitorul.

// tsconfig.json
{
  "compilerOptions": {
    "importsNotUsedAsValues": "preserve",
    "preserveValueImports": true
  }
}

Rezultat (tsc 5.9)

$ npx tsc
tsconfig.json(3,5): error TS5102: Option 'importsNotUsedAsValues' has been removed. Please remove it from your configuration.
  Use 'verbatimModuleSyntax' instead.
tsconfig.json(4,5): error TS5102: Option 'preserveValueImports' has been removed. Please remove it from your configuration.
  Use 'verbatimModuleSyntax' instead.

Exemplul 2: Varianta de azi

Cu verbatimModuleSyntax (opțiune care nu face parte din setările exemplelor de pe site), import type dispare din JavaScript, iar importul obișnuit rămâne. Codul de mai jos rulează la fel cu ambele setări.

import type { ParsedPath } from "node:path";
import { parse } from "node:path";

const fisier: ParsedPath = parse("/home/ana/facturi/ianuarie.pdf");
console.log(fisier.name, fisier.ext);

Rezultat

ianuarie .pdf

Greșeli frecvente

  • Să lași opțiunea în tsconfig.json după actualizarea la TypeScript 5.5+. Compilarea se oprește cu TS5102.

Comenzi înrudite

  • verbatimModuleSyntax: Importurile rămân exact cum sunt scrise; se șterg doar cele marcate cu type, deci tipurile trebuie importate cu import type.
  • isolatedModules: Dă eroare pentru codul care nu poate fi transformat corect fișier cu fișier (de esbuild, Babel, swc sau Node.js).