typescript - Cum să exporți o valoare externă declarată ca export denumit?


Exportarea unei valori declarate (adică o variabilă globală presupus definită extern) ca export implicit funcționează conform așteptărilor:

// TypeScript
declare const foo: number
export default foo

// ES2015
export default foo;

Dar încercarea de a o exporta ca un export numit nu funcționează:

// TypeScript
export declare const foo: number

// ES2015
export {};

Există vreo modalitate să facem să funcționeze asta?

Răspuns #1

Presupun că cauți

declare global {
    var foo: number;
}
export const foo = globalThis.foo;

Acesta declară că există o variabilă globală numită foo (creată de alt cod), apoi creează o const locală numită foo care este inițializată cu valoarea globală și o exportă sub numele foo.

Dacă utilizarea globalThis nu funcționează pentru tine (de exemplu, deoarece globalul este de fapt declarat ca un const, nu ca o proprietate a obiectului global așa cum ar fi un var), atunci trebuie să introduci un identificator local cu un nume diferit pentru a evita coliziunile și să îl exporți:

declare global {
    const foo: number;
}
const _foo = foo;
export { _foo as foo }

Aceasta declară că există o constantă globală numită foo (creată de un alt script), apoi creează o constantă locală numită _foo care este inițializată cu valoarea globală și o exportă sub numele foo.

Acesta este cam exact ceea ce face și exportul tău implicit - export default foo; este echivalent cu

const _default = foo;
export { _default as default }

(except _default este o legătură ascunsă care nu poate fi accesată din cod).

Nu este posibil în modulele ECMAScript să exportați o variabilă care nu este declarată de modulul curent sau nu este exportată de un alt modul (pe care ați putea să-l exportați { … } from '…';). Fiecare legătură exportată trebuie să fie declarată într-un modul.