javascript - Använda enum från ambient TypeScript-modul med @babel/preset-typescript?


Är det möjligt att konsumera en enum från en fil som transpileras av babel med hjälp av @babel/preset-typescript?

mymodule.d.ts
declare module 'mymodule' {
  export enum Fruit {
    apple = 'Apple',
  }
}
script.js
import { Fruit } from 'mymodule'

assert.equals(Fruit.apple === 'Apple')

Fruit kommer att vara odefinierad i det här fallet eftersom babel inte känner till den omgivande deklarationen.

Finns det ett sätt att kringgå detta förutom att deklarera en separat enum/konstanter-fil och direkt importera dessa på båda ställen (den omgivande modulen och skriptet)?

Svar #1

Du kan inte importera körbar kod från en deklarationsfil (*.d.ts).

Du kan använda en deklarationsfil för att beskriva vad som händer i en annan modul. I det här fallet, om Fruit finns i mymodule, kan du deklarera dess form i mymodule.d.ts — men det är inte deklarationen som körs, utan den faktiska koden som finns i mymodule.

Med andra ord måste Fruit finnas i en *.ts eller *.js-fil för att kunna användas i runtime.

Relaterade artiklar