我们已经定义了一个基类,它将被多次子类化.我们希望在基类上定义一个exec
方法,该方法接受派生类上方法的名称和参数,然后调用它.
但是,我们遇到了派生类方法的参数类型化问题.以下是演示该错误的一段代码:
class BaseClass {
exec<
Self extends Record<MethodKey, (...args: any) => void>,
MethodKey extends keyof Self,
Method extends Self[MethodKey],
>(
this: Self,
methodKey: MethodKey,
...args: Parameters<Method>
) {
this[methodKey](...args);
}
}
class MyClass extends BaseClass {
constructor() {
super();
this.exec(`sayMessage`, `Hello`); // Error: Argument of type '["Hello"]' is not assignable to parameter of type 'Parameters<this["sayMessage"]>'.
}
sayMessage(message: string) {
console.log(message);
}
}
为什么这不起作用,我们如何正确地键入exec
方法,以便它接受另一个方法的参数?