typescript - Existuje nějaký způsob, jak bezpečně typovat funkci import()?
Výraz import() v TypeScriptu umožňuje načítat kód až při běhu programu. Mohu například zavolat await import('@my-app/a/b') a obdržet objekt, který má přesně ty členy, které jsou exportovány z odkazovaného zdrojového modulu.
Toto je typově bezpečné; kompilátor TypeScriptu během návrhu ví, jaké členy budou k dispozici na vráceném objektu na základě cesty.
Existuje nějaký způsob, jak obalit tento výraz import() a stále získat zpět silně typovaný objekt?
Případ použití by byl takový, že mohu provést některé standardní operace na vráceném objektu, než bude předán zpět volajícímu kódu.
Například:
Použití holého lazy-loadovaného modulu:
const module = await import('@my-app/a/b');
module.doSomething();
Použití modulů načítaných na vyžádání až po dokončení standardních operací:
const module = await loadAndProcessModule('@my-app/a/b');
module.doSomething();
Otázka je, jak implementovat, nebo alespoň deklarovat, loadAndProcessModule, aniž by byla narušena bezpečnost typů.
Odpověď č. 1
Myslím, že abyste to mohl udělat, musel byste být schopen vyjádřit typeof import("module-specifier") jako generikum. Například podpis vaší funkce loadAndProcessModule by měl vypadat nějak takto:
function loadAndProcessModule<T extends string>(moduleSpecifier: T): typeof import(T) {
// ...
}
Bohužel to dnes v Typescriptu není možné - viz tato otázka a tento otevřený požadavek na funkci.
