Ce face import type
import type { Elev } from "./elevi.mjs" importă doar informații de tip. Numele importat poate fi folosit în adnotări, dar nu ca valoare (nu poți face new cu el sau să-l afișezi). La compilare, întreaga linie este ștearsă, deci modulul nu este încărcat la rulare doar pentru un tip.
Din TypeScript 4.5 poți marca individual: import { citeste, type Elev } from "..." importă valoarea citeste și tipul Elev. Opțiunea verbatimModuleSyntax cere ca orice import folosit doar ca tip să fie marcat cu type, ca uneltele care compilează fișier cu fișier (esbuild, Babel, Node.js cu ștergerea tipurilor) să știe sigur ce să șteargă.
Forma import("./modul.mjs").Tip se poate scrie direct într-o adnotare, fără linie de import; este folosită mai ales în JSDoc și în fișierele .d.ts.
Exemple
Exemplul 1: Tipuri din modulele Node.js
Stats și ParsedPath sunt doar tipuri. Valorile (statSync, parse) se importă normal.
import type { Stats } from "node:fs";
import { statSync, writeFileSync } from "node:fs";
import { parse, type ParsedPath } from "node:path";
writeFileSync("note.txt", "Ana 10\nMihai 9\n");
function descrie(info: Stats, cale: ParsedPath): string {
return `${cale.name}${cale.ext}: ${info.size} octeți, fișier: ${info.isFile()}`;
}
console.log(descrie(statSync("note.txt"), parse("./note.txt")));
Rezultat
note.txt: 15 octeți, fișier: true
Exemplul 2: Un tip importat nu poate fi folosit ca valoare
import type { EventEmitter } from "node:events";
const e = new EventEmitter();
console.log(e);
Eroarea afișată de tsc
exemplu.mts(2,15): error TS1361: 'EventEmitter' cannot be used as a value because it was imported using 'import type'.
Exemplul 3: import() direct în adnotare
function afiseaza(u: import("node:url").URL): string {
return `${u.hostname}${u.pathname}`;
}
console.log(afiseaza(new URL("https://dexblog.ro/invata/typescript/")));
Rezultat
dexblog.ro/invata/typescript/
Greșeli frecvente
- Imporți cu
import typeo clasă pe care apoi o folosești cuinstanceofsaunew. Ai nevoie de importul normal. - Compilezi cu esbuild un import de tip nemarcat dintr-un modul care nu există la rulare. Marchează-l cu
typesau activeazăverbatimModuleSyntaxca tsc să te oblige.
Comenzi înrudite
export type: Exportă tipuri dintr-un modul; forma export type { … } re-exportă doar tipuri, fără cod la rulare.module și import/export: Fiecare fișier cu import sau export este un modul; exporți funcții, clase și tipuri și le imporți în alte fișiere.fișiere .d.ts: Fișiere care conțin doar tipuri: descriu codul JavaScript ca să poată fi folosit din TypeScript cu verificare.verbatimModuleSyntax: Importurile rămân exact cum sunt scrise; se șterg doar cele marcate cu type, deci tipurile trebuie importate cu import type.