typescript - Finns det något sätt att typ-säkert omsluta import()-funktionen?
TypeScripts import()-uttryck tillåter att laddas in kod vid körning på ett fördröjt sätt. Jag kan till exempel anropa await import('@my-app/a/b') och få ett objekt som har exakt de medlemmar som exporteras från den refererade källmodulen.
Detta är typesäkert; TypeScript-kompilatorn vet vid design-tid vilka medlemmar som kommer att finnas på det returnerade objektet baserat på vägen.
Finns det något sätt att omsluta detta import()-uttryck och fortfarande få tillbaka det starkt typade objektet?
Ett användningsfall skulle vara så att jag kan utföra några standardoperationer på det returnerade objektet innan det ges tillbaka till den anropande koden.
Till exempel:
Använder den nakna lazy-laddade modulen:
const module = await import('@my-app/a/b');
module.doSomething();
Att använda den lat-laddade modulen först efter att standardoperationer har utförts:
const module = await loadAndProcessModule('@my-app/a/b');
module.doSomething();
Frågan är hur man implementerar, eller åtminstone deklarerar, loadAndProcessModule utan att bryta typ-säkerheten.
Svar #1
Jag tror att för att göra detta skulle du behöva kunna uttrycka typeof import("module-specifier") som en generisk typ. Till exempel skulle din loadAndProcessModule-funktionssignatur behöva se ut ungefär så här:
function loadAndProcessModule<T extends string>(moduleSpecifier: T): typeof import(T) {
// ...
}
Tyvärr är detta inte möjligt i Typescript idag - se denna fråga och denna öppna funktionförfrågan.
