有一个函数接受用户数组并返回符合过滤条件的用户名数组。告诉我如何正确输入,因为 ts 给出了错误
type TUser = [string, number, boolean][];
const users: TUser = [
["Alice", 25, true],
["Bob", 30, false],
["Charlie", 22, true],
["David", 27, true],
["Eve", 20, false],
["Fanny", 29, true],
["George", 67, true],
];
function filterAndSortUsers(arr: TUser): string[] {
let filtArr: TUser = arr.filter((item) => item[1] >= 25 && item[2] === true);
let sortedArr: TUser= filtArr.sort(function (a, b) {
return a[1] - b[1];
});
let newArr: string[] = sortedArr.map((el) => el.splice(0, 1)).flat();
return newArr;
}
错误文本:类型“(string | number | boolean)[]”无法分配给类型“string[]”。类型“string | number | boolean”不能分配给类型“string”。类型“number”不能分配给类型“string”。
.splice是一个数组方法,而不是一个元组。因此,它无法根据传递的参数推断结果的类型。相反,会推断出一般元素类型:string | number | boolean。来解决您需要的
或者不使用
.splice,而是选择特定元素,例如el[0]- 在这种情况下,返回类型计算正确.map或明确指出
typescript期望的类型,例如使用as:el.splice(0, 1) as [string]