У вас правильная идея, просто неправильный синтаксис.
Вот как вы пишете это.
interface Array<T> {
sum(this: number[]): number;
}
Обратите внимание, как мы использовали тип this
, который являетсяСинтетический параметр не меняет арность функции.Синтаксис, который вы пытались использовать, хотя и является интересным предположением, используется для другой цели, а именно для защиты типов.
Интересная часть заключается в том, что аннотация типа в this
имеет приоритет над типом интерфейса.Вы также можете объявить универсальный параметр, применить его к this
и наложить ограничения на T
, чтобы он также мог быть скомпонован.Существует масса гибкости.
Вот интересный, который сочетает в себе как тип интерфейса, так и уточняя его с помощью this
interface Array<T> {
flatten(this: T[][]): T[];
}