چگونه `keyof MyClass.prototype` را در تایپاسکریپت بگوییم؟


در تایپاسکریپت میتوانم جنریک تعریف کنم و مجبور کنم که در genericForObj فقط ویژگیهای یک شیء خاص پاس داده شوند.

class MyClass
{
  one(){};
  two(){};
}

function genericForObj<T, K extends keyof T>(obj: T, prop: K)
{

}

const obj = new MyClass;

genericForObj(obj, 'one'); // OK

genericForObj(MyClass, 'one');
// Error: Argument of type '"one"' is not
// assignable to parameter of type '"prototype"'.

چگونه در تابع ژنریک keyof MyClass.prototype را تشخیص دهیم؟

پاسخ شماره ۱

با تشکر از @gcnew، genericForClass زیر دقیقاً همان کاری را انجام میدهد که میخواستم:

class MyClass
{
  one(c: boolean){};
  two(){};
}

function genericForClass
<T extends Function, K extends keyof T['prototype']>
(classHandler: T, method: K)
{

}

genericForClass(MyClass, 'one') // OK
genericForClass(MyClass, 'fake') // Error

پاسخ شماره ۲

کد زیر تمام ویژگیها و متدهای یک کلاس را برمیگرداند:

keyof typeof MyClass['prototype']