在 Typesript 中动态导入类型

Dev*_*rma 0 typescript

我有一个文件说MyFactory.ts。文件内容如下:

export type CommandFactory = () => string[] | undefined;
export enum FactoryIds {commandFactory : 'commandFactory'}
Run Code Online (Sandbox Code Playgroud)

现在我想将此文件动态导入到另一个文件(例如main.ts)中并CommandFactory在其中使用类型。内容main.ts如下:

const Factory = await import('./MyFactory');
const commandFactories : Factory.CommandFactory[] = []; //Here I am getting error that Property 'CommandFactory' does not exist on type 'typeof import('MyFactory')'
Run Code Online (Sandbox Code Playgroud)

虽然我可以轻松通过FactoryIdsFactory.FactoryIds无法CommandFactory使用Factory.CommandFactory. 我想知道如何动态导入文件CommandFactory中的类型main.ts

Ник*_*нов 7

动态导入类型是没有意义的,因为类型是静态的\xe2\x80\x93,它们在编译后被消除。如果需要从要动态导入的模块中导入类型,可以单独导入类型:

\n
import type { CommandFactory } from \'./MyFactory\';\n\nconst Factory = await import(\'./MyFactory\');\n
Run Code Online (Sandbox Code Playgroud)\n

import type语句在编译期间被消除,因此您的模块仍将仅在运行时动态导入。

\n