Как создать свою функцию прототип для массива в TypeScript?
Изучаю TypeScript, сразу к делу: Я пытаюсь создать функцию, которую можно будет вызвать в массиве. Пример:
[1, 2, 3].f();
Сам код на TypeScript:
Array.prototype.f = () => 5;
Но вот незадача, VS Code сообщает мне такую ошибку:
Свойство "f" не существует в типе "any[]".
Что делать? На название функции не обращайте внимания, это просто тест.
Ответы (2 шт):
Автор решения: DarkVessel
→ Ссылка
Спросил у знакомого, он сказал что нужно использовать интерфейсы.
interface Array<T> {
f(): number
}
Array.prototype.f = () => 5;
Автор решения: qwabra
→ Ссылка
модификация встроенных классов считается плохим подходом.
есть как минимум два способа избежать этого.
вариант Раз:
type $mix = <T, M extends {}>(arr: T, mixin: M) => T & M;
const mix: $mix = (a, m) => Object.assign(a, m)
const arr = [1, 2, 3]
const mixin = {
sum(this: number[]) {
return this.reduce((a, b) => a + b)
}
}
const extendedArr = mix(arr, mixin)
const sum = extendedArr.sum()
console.log(sum)
"use strict";
const mix = (a, m) => Object.assign(a, m);
const arr = [1, 2, 3];
const mixin = {
sum() {
return this.reduce((a, b) => a + b);
}
};
const extendedArr = mix(arr, mixin);
const sum = extendedArr.sum();
console.log(sum);
вариант Два:
создать новый класс, расширяющий базовый.
P.S.
для углубления рекомендую изучить такие библиотеки как: lodash, JQuery.