有没有一种方法可以使用泛型参数导入类型?

Is there a way I can import types using a generic parameter?

我的函数有点像动态 import() 语法的包装器:

async importWrapper(url) {
  return await import(url);
}

有没有办法让这个函数根据 url 参数的值使用 return 类型?

我试过了:

async function importWrapper<T extends string>(url: T) : Promise<typeof import(T)> {
    return await import(url);
}

但这给出了一个错误:

Promise<typeof import(T)>
//                   ^^^--- TS1141 String literal expected

playground

至少从 TypeScript 4.6 开始,无法表达 import(T)typeof import(T).

形式的“import 类型”

microsoft/TypeScript#44636 上有一个开放的功能请求,要求支持这样的事情。它目前被标记为“等待反馈”,这意味着他们希望在考虑采用此类功能之前了解社区的想法。因此,您可能想提出问题并评论您的用例;特别是为什么您需要这个以及为什么现有的解决方法还不够。

无论如何,我不希望很快看到任何实施,甚至可能永远不会。 A comment TS 的开发负责人表示,实施起来将是一项“繁重的工作”。好吧!