TypeScript 中如何限定 reduce() 方法
使用泛型在 TypeScript 中限定 reduce() 方法,例如 const result = arr.reduce<Record<string, string>>(myFunction, {})。 泛型用于指定 reduce() 方法的返回值和初始值的类型。
const arr = [{ id: 1 }, { name: 'Alice' }, { salary: 100 }];
type ReduceReturnType = {
id?: number;
name?: string;
salary?: number;
};
const result = arr.reduce<ReduceReturnType>(
(accumulator, current) => {
return { ...accumulator, ...current };
},
{}, // ?️ initial value
);
// const result: ReduceReturnType
console.log(result); // ?️ {id: 1, name: 'Alice', salary: 100}
console.log(result.id); // ?️ 1
console.log(result.name); // ?️ "Alice"
console.log(result.salary); // ?️ 100
我们使用泛型来指定 reduce() 方法的初始值和返回值的类型。
结果变量的类型在示例中为 ReduceReturnType。
我们还可以使用类型断言,尤其是在返回值的类型与初始值的类型不同的情况下。
const arr = [{ id: 1 }, { name: 'Alice' }, { salary: 100 }];
type ReduceReturnType = {
id: number; // ?️ ?️ ?️ no longer optional
name: string;
salary: number;
};
const result = arr.reduce<ReduceReturnType>(
(accumulator, current) => {
return { ...accumulator, ...current };
},
{} as ReduceReturnType, // ?️ ?️ ?️ Now using Type Assertion
);
// const result: ReduceReturnType
console.log(result); // ?️ {id: 1, name: 'Alice', salary: 100}
console.log(result.id); // ?️ 1
console.log(result.name); // ?️ "Alice"
console.log(result.salary); // ?️ 100
我们传递给 reduce() 方法的函数会为数组中的每个元素调用。 reduce() 方法返回累加的结果。
在下一次迭代中,累加器变量包含我们从回调函数返回的任何内容。
让我们看另一个输入 reduce() 方法的例子。
const arr = ['a', 'b', 'c'];
type ReduceReturnType = Record<string, string>;
const result = arr.reduce<ReduceReturnType>(
(accumulator, current) => {
return { ...accumulator, [current]: current };
},
{}, // ?️ initial value
);
// const result: ReduceReturnType
console.log(result); // ?️ {a: 'a', b: 'b', c: 'c'}
我们使用 Record<string, string> 作为累加器的类型、reduce() 方法的初始值和返回值。
Record<Keys, Type> 类型是一种实用类型,用于构造其键和值具有特定类型的对象。
换句话说,示例中的累加器变量是一个包含字符串键和值的对象。
当前变量存储当前迭代的数组元素。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。