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.tsdeclare module 'mymodule' {
export enum Fruit {
apple = 'Apple',
}
}
script.jsimport { 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.