Расширение прототипа массива с помощью функции c - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь добавить простую обобщенную функцию c в прототип Array, но TypeScript выдает мне ошибку о типах, которые я не получаю.

interface Array<T> {
    pluck<T, TKey extends keyof T>(this: T[], key: TKey): T[TKey][];
}

Array.prototype.pluck = function pluck<T, TKey extends keyof T>(this: T[], key: TKey): T[TKey][] {
    return this.map(item => item[key]);
}

Вот код Codesandbox: https://codesandbox.io/s/typescript-playground-export-3oww1?fontsize=14&hidenavigation=1&theme=dark

Спасибо за помощь:)

1 Ответ

1 голос
/ 23 марта 2020

Когда вы ссылаетесь на обобщенный параметр c в определении интерфейса или класса, вы не должны создавать его в методе. Прямо сейчас TypeScript правильно указывает, что T от Array<T> не совпадает с T от pluck<T. Так что, если вы удалите один в определении интерфейса, все в порядке:

interface Array<T> {
    pluck<TKey extends keyof T>(this: T[], key: TKey): T[TKey][];
}
...