Specмашинопись Array.prototype.map декларация
Согласно MDN specification for Array.prototype.map() карте должны быть использованы, как это ...
var new_array = arr.map(callback[, thisArg])
Проблема
Машинопись имеет несколько перегруженных деклараций для карты, и это очень затрудняет extend Array<T>
.
я ожидал бы увидеть эту (который находится в lib.d.ts) ...
map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): U[];
Но lib.d.ts также имеет эти ...
map<U>(this: [T, T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U, U];
map<U>(this: [T, T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U, U];
map<U>(this: [T, T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U, U];
map<U>(this: [T, T], callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: any): [U, U];
Возражение
Поскольку JavaScript не разрешает перегрузку метода, а также не использует TypeScript для реализации класса, я не что TypeScript должен допускать это для эмбиентных объявлений.
Вопросы
- Почему машинопись позволяет перегруженных подписей для окружающей среды деклараций?
- Как переопределить реализацию карты в классе, который расширяет массив?
Я поднял это на GitHub тоже ... https://github.com/Microsoft/TypeScript/issues/13785
Примечание
ReadonlyArray<T>
имеет только одну сигнатуру для карты, которая ...
map<U>(callbackfn: (value: T, index: number, array: ReadonlyArray<T>) => U, thisArg?: any): U[];
Интересно, что вы не спрашивали о том, что ИМО будет самым важным аспектом здесь: _purpose_. Как в * «зачем определять все эти сигнатуры перегрузки в первую очередь?» * - И ответом на это будет тот факт, что TypeScript имеет тип-концепцию массивов с конечным количеством элементов, например '[number , number, number] 'является 3-элементным номером []'. Это присваивается как _to_, так и _from_ 'number []', но не является _precisely_ одинаковым с точки зрения компилятора. Кроме того, они также называются типами кортежей в некотором контексте и могут определять необязательно связанные между собой типы elem. –
@JohnWeisz Я получаю эту концепцию n-элементов массивов, но тогда почему эта концепция в этом отношении останавливается на 5-элементных массивах? Неужели n может быть бесконечным? – series0ne