export type în TypeScript

Module și declarații TypeScript 3.8

Exportă tipuri dintr-un modul; forma export type { ... } re-exportă doar tipuri, fără cod la rulare.

Sintaxă
export type Tip = ...;
export interface I { ... }
export type { Tip } from "./alt-modul.mjs";
export type { A, B };

Ce face export type

Interfețele și aliasurile de tip se exportă ca orice altceva: export interface Elev { ... }, export type Id = number | string. La compilare, aceste exporturi dispar din JavaScript, pentru că tipurile nu există la rulare.

Forma export type { Elev } from "./elevi.mjs" (sau export type { A, B } pentru nume declarate local) spune explicit că se exportă doar tipuri. Este folosită în fișierele „index” care adună tipurile dintr-un pachet. Cu isolatedModules sau verbatimModuleSyntax activate, re-exportul unui tip trebuie marcat cu type, pentru că o unealtă care vede un singur fișier nu poate ști dacă numele este tip sau valoare.

Un nume exportat cu export type nu poate fi folosit ca valoare de cine îl importă, chiar dacă la origine este o clasă.

Exemple

Exemplul 1: Tipuri exportate împreună cu funcțiile

Programul rulează ca un singur fișier; exporturile sunt acolo pentru alte module care l-ar importa.

export type Moneda = "lei" | "euro";

export interface Pret {
    suma: number;
    moneda: Moneda;
}

export function format(p: Pret): string {
    return `${p.suma.toFixed(2)} ${p.moneda}`;
}

class Cos {
    produse: Pret[] = [];
}
export type { Cos };           // doar tipul clasei, nu și clasa

const c: Cos = { produse: [{ suma: 12.5, moneda: "lei" }] };
console.log(c.produse.map(format));

Rezultat

[ '12.50 lei' ]

Exemplul 2: Re-export de tipuri într-un fișier index

Fișierul index.mts adună tipurile din alte module. Liniile export type dispar din JavaScript-ul generat; rămâne doar re-exportul funcției format.

// index.mts
export type { Elev } from "./elevi.mjs";
export type { Pret, Moneda } from "./preturi.mjs";
export { format } from "./preturi.mjs";

Fișierul index.mjs generat de tsc

export { format } from "./preturi.mjs";

Greșeli frecvente

  • Re-exporți un tip cu export { Elev } from ... într-un proiect cu isolatedModules. tsc dă Re-exporting a type when ‘isolatedModules’ is enabled requires using ‘export type’.
  • Exporți o clasă cu export type și te miri că alt modul nu o poate instanția.

Comenzi înrudite

  • import type: Importă doar tipuri; importul dispare complet din JavaScript-ul generat.
  • 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.
  • isolatedModules: Dă eroare pentru codul care nu poate fi transformat corect fișier cu fișier (de esbuild, Babel, swc sau Node.js).