我正在为Typescript加载一个基于字符串地址从外部库加载的加载器类.
示例:’namespace / subnamespace / module’或’namespace / module’
我希望我的loader类为每个请求的模块返回一个接口,以便在使用loader类时自动正确输入.
例:
export abstract class moduleLoader {
public static load(...modules: string[]) {
return externalLoader.loadModules(modules); // Promise<any[]>
}
}
------------------------------
let [module1, module2] = await moduleLoader.load('namespace/subnamespace/module', 'namespace/module');
if (module1 instanceof iNamespace.iSubnamespace.iModule) { }
我无法弄清楚如何构造loader方法,以便从传入的字符串推断或映射接口,或者传入接口并从那里获取字符串以传递给外部加载器.
我知道我可以在load方法上设置泛型,以便给出适当的接口返回值,但我希望它是自动的,以便使用该方法的开发人员不需要自己弄清楚并消除运行时错误.这个代码库供外部开发者使用,所以我不想相信他们知道他们在做什么.
这甚至可能吗?
任何帮助或想法都表示赞赏.
最佳答案 这不完全是您所需要的,但您可以使用
function overloads一次提供一个库:
interface MyLib1 {
str: string
}
interface MyLib2 {
nb: number
}
function load(libName: "MyLib1"): Promise<MyLib1>
function load(libName: "MyLib2"): Promise<MyLib2>
function load(libName: string): Promise<any> {
return /* */
}
然后,使用它:
let myLib1 = await load("MyLib1") // type is: 'MyLib1'
let myLib2 = await load("MyLib2") // type is: 'MyLib2'
或者,使用它同时加载几个库:
let [myLib1, myLib2] = await Promise.all([
load("MyLib1"),
load("MyLib2")
])
// 'myLib1' is of type 'MyLib1', and 'myLib2' is of type 'MyLib2'