在 TypeScript 中输入 reduce() 方法
How to Type the reduce() method in TypeScript
使用泛型reduce()
在 TypeScript 中键入方法,例如
const result = arr.reduce<Record<string, string>>(myFunction, {})
. 泛型用于指定reduce()
方法的返回类型和初始值。
索引.ts
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
。
result
变量的类型ReduceReturnType
在示例中。
我们将属性标记为
可选
以ReduceReturnType
满足编译器的要求,因为我们传递给reduce()
方法的初始值是一个空对象并且与
ReduceReturnType
.
您还可以使用
类型断言,尤其是当返回值的类型与初始值的类型不同时。
索引.ts
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()
方法返回累积结果。
我们传递给方法的第二个参数是
accumulator
变量的初始值。
在下一次迭代中,该accumulator
变量包含我们从回调函数返回的任何内容。
让我们看一下键入该reduce()
方法的另一个示例。
索引.ts
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>
方法的类型accumulator
、初始值和返回值reduce()
。
该Record<Keys, Type>
类型是
实用类型
,用于构造其键和值具有特定类型的对象。
示例中的类型表示当对象以字符串键索引时,它返回一个字符串类型的值。
换句话说,accumulator
示例中的变量是一个包含字符串键和值的对象。
该current
变量存储当前迭代的数组元素。