如何解决可以用与"T[]"无关的任意类型实例化'T'?



我发现了这个函数:

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的子集。因此,如果arrArray<T>类型,那么chunk也是。但是res的类型也是Array<T>(或等效的T[](,因此res.push需要类型为T的参数,而不是Array<T>的参数。

尝试将res的类型从T[]更改为T[][]

最新更新