Когда вы ссылаетесь на обобщенный параметр c в определении интерфейса или класса, вы не должны создавать его в методе. Прямо сейчас TypeScript правильно указывает, что T
от Array<T>
не совпадает с T
от pluck<T
. Так что, если вы удалите один в определении интерфейса, все в порядке:
interface Array<T> {
pluck<TKey extends keyof T>(this: T[], key: TKey): T[TKey][];
}