#javascript #reactjs #typescript
#javascript #reactjs #typescript
Вопрос:
Я нашел эту функцию:
function sliceIntoChunks(arr, chunkSize) {
const res = [];
for (let i = 0; i < arr.length; i = chunkSize) {
const chunk = arr.slice(i, i chunkSize);
res.push(chunk);
}
return res;
}
и я хочу ввести его:
export const sliceIntoChunks = <T>(
arr: Array<T>,
chunkSize: number
): Array<T> => {
const res: T[] = [];
for (let i = 0; i < arr.length; i = chunkSize) {
const chunk = arr.slice(i, i chunkSize);
res.push(chunk);
}
return res;
};
Получение ошибки здесь: res.push(chunk);
ошибка:
Аргумент типа ‘T[]’ не может быть присвоен параметру типа ‘T’.
‘T’ может быть создан с произвольным типом, который может быть не связан с ‘T[]’.
Как мне это правильно реализовать?
Ответ №1:
Результирующий массив будет представлять собой массив массивов, поэтому:
const sliceIntoChunks = <T>(
arr: Array<T>,
chunkSize: number
): Array<T[]> => {
const res = [];
for (let i = 0; i < arr.length; i = chunkSize) {
const chunk = arr.slice(i, i chunkSize);
res.push(chunk);
}
return res;
};
Ответ №2:
Array.prototype.slice
возвращает массив, подмножество arr
. Итак, если arr
имеет тип Array<T>
, то chunk
тоже. Но res
также имеет тип Array<T>
(или эквивалент T[]
), поэтому res.push
ожидает аргумент типа T
, а не Array<T>
.
Попробуйте изменить тип res
from T[]
на T[][]
.