TypeScript静态方法无法推断类实例方法属性名的解决方案问询
问题:实现仅接受类实例方法名的静态方法
我尝试实现一个仅接受类实例方法属性名的静态方法,但在以下场景中不知如何实现。求可行思路(调用签名请勿使用类型断言):
第一种实现尝试
type MethodKeys<T extends object> = keyof { [K in keyof T as T[K] extends (...args: any) => any ? K : never]: unknown }; class Model{ static chainMethod<C extends typeof Model, T extends InstanceType<C>, K extends MethodKeys<T>> (this: C, name: K, method: T[K]) { } method(){ } } class Party{ static addProps<C extends typeof Model>(model: C){ model.chainMethod('method', function(){ // 此处报错 }) } }
第二种实现尝试
class Model{ static chainMethod<C extends typeof Model, T extends InstanceType<C>, K extends keyof T, F extends T[K] extends (...args: any) => any ? T[K]: never> (this: C, name: K, method: F) { } method(){ } } class Party{ static addProps<C extends typeof Model>(model: C){ model.chainMethod('method', function(){ }) } }
更新
Matt Kantor已解决第二个方案,但我仍更偏好第一个能自动补全仅显示方法名的方案
内容的提问来源于stack exchange,提问作者Alexander Nenashev
相关产品推荐
相关产品推荐

