, , , , .
, kotlin, , javascript ( typescript) :
let list = [1, 2, 3] as number[] & { swap(i1: number, i2: number): void };
list.swap = function (i1: number, i2: number) {
let tmp = this[i1]
this[i1] = this[i2]
this[i2] = tmp;
}
list.swap(0, 2);
console.log(list);
factory :
function extend<T>(list: T[]): T[] & { swap(i1: number, i2: number): void } {
(list as T[] & { swap(i1: number, i2: number): void }).swap = function (i1: number, i2: number) {
let tmp = this[i1]
this[i1] = this[i2]
this[i2] = tmp;
}
return list as T[] & { swap(i1: number, i2: number): void };
}
let list = extend([1, 2, 3]);
list.swap(0, 2);
console.log(list);
( )