چگونه `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']
