Encontré esta función:
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; }y quiero escribirlo:
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; }; Obteniendo un error aquí: res.push(chunk);
error:
El argumento de tipo 'T[]' no se puede asignar al parámetro de tipo 'T'.
Se podría crear una instancia de 'T' con un tipo arbitrario que podría no estar relacionado con 'T[]'.
¿Cómo implemento esto correctamente?
La matriz resultante será una matriz de matrices, por lo que:
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; };Array.prototype.slice devuelve una matriz, un subconjunto de arr . Entonces, si arr es de tipo Array<T> , entonces chunk también lo es. Pero res también es de tipo Array<T> (o el equivalente T[] ), por lo que res.push espera un argumento de tipo T , no Array<T> .
Intente cambiar el tipo de res de T[] a T[][] .