如何使用非文字说明符键入动态导入的模块



我必须在TypeScript代码库中动态导入具有非文字说明符的模块,并希望严格键入导入的模块。由于import返回一个Promise解析为any,因此该示例确实按预期工作,但如果导入的模块发生更改,不再导出预期内容,则应用程序将在运行时失败。我知道TypeScript在使用文字说明符时可以自动键入动态导入,但有没有(推荐的(方法可以使用非文字说明符静态键入动态导入以确保在编译时可以发现类型错误?

一个最小的例子如下:

指数.ts

const main = async (moduleName: string) => {
const { foo } = await import(moduleName);
console.log(foo());
};
void main("./moduleA");
void main("./moduleB");

模块A.ts

export const foo = () => "fooA";

模块A.ts

export const foo = () => "fooB";

我会在这里使用强制转换:

const main = async (moduleName: string) => {
const { foo } = await import(moduleName) as { foo: () => string };
console.log(foo());
};

最新更新