我发现了这个函数:
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"的参数
'Tt'可以用任意类型实例化,该类型可以是与"T[]"无关。
如何正确实现此功能?
生成的数组将是数组的数组,因此:
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
返回一个数组,是arr
的子集。因此,如果arr
是Array<T>
类型,那么chunk
也是。但是res
的类型也是Array<T>
(或等效的T[]
(,因此res.push
需要类型为T
的参数,而不是Array<T>
的参数。
尝试将res
的类型从T[]
更改为T[][]
。