function mapArray<T, U>(arr: T[], callback: (element: T) => U): U[] {
return arr.map(callback);
}
// 类型推断过程:
// 1. 定义泛型函数 `mapArray`,有两个类型参数 `T` 和 `U`。
// 2. `arr` 参数类型为 `T[]`,表示接受一个元素类型为 `T` 的数组。
// 3. `callback` 参数类型为 `(element: T) => U`,表示接受一个函数,该函数接受类型为 `T` 的参数,并返回类型为 `U` 的值。
// 4. 通过 `arr.map(callback)` 调用数组的 `map` 方法,`map` 方法会对数组中的每个元素应用 `callback` 函数,并返回一个新数组。
// 5. 由于 `callback` 函数返回类型为 `U`,所以新数组的元素类型为 `U`,整个函数的返回类型就是 `U[]`。
// 示例使用
const numbers = [1, 2, 3];
const squaredNumbers = mapArray(numbers, (num) => num * num);
// 这里 `T` 被推断为 `number`,`U` 也被推断为 `number`,返回类型为 `number[]`