【发布时间】:2021-03-27 01:13:02
【问题描述】:
我在 typescriptlang.org(打字稿游乐场)上运行当前代码
我已经阅读了 typeScript 中类型的重要性以及如何在函数中使用它们。但是我正在努力在这个 reduce 方法中添加以下类型:
// Types for car
type Car = {
name:string,
age:number,
registered: boolean
};
// Reduce function to hopefully get the total number of cars that are registered.
function totalRegisteredCars(cars:Car[]) {
cars.reduce((acc:number , car:Car) => {
if(car.registered === true ) {
acc + 1;
}
},0);
}
var cars = [
{name:'vw' , age: 30, registered: true},
{name:'vw' , age: 32, registered: true},
{name:'Merc' , age: 25, registered: false},
{name:'bmw' , age: 20, registered: false},
{name:'bmw' , age: 21, registered: true},
{name: 'ford', age: 31, registered: false},
{name: 'pinto', age: 43, registered: false},
{name: 'uno', age: 41, registered: true},
{name: 'ford', age: 30, registered: true},
{name: 'Mustang', age: 19, registered: false}
];
console.log(totalRegisteredCars(cars));
当在https://www.typescriptlang.org/play 中有这个时,我收到以下错误:
错误信息
没有重载匹配这个调用。重载 1 of 3, '(callbackfn: (previousValue: Car, currentValue: Car, currentIndex: number, array: Car[]) => Car, initialValue: Car): Car',报错如下。
'(acc: number, car: Car) => void' 类型的参数不能分配给'(previousValue: Car, currentValue: Car, currentIndex: number, array: Car[]) => Car '。 参数“acc”和“previousValue”的类型不兼容。 类型“汽车”不能分配给类型“数字”。
Overload 2 of 3, '(callbackfn: (previousValue: number, currentValue: Car, currentIndex: number, array: Car[]) => number, initialValue: number): number',给出以下错误。 '(acc: number, car: Car) => void' 类型的参数不能分配给 '(previousValue: number, currentValue: Car, currentIndex: number, array: Car[]) => number' 类型的参数。 类型 'void' 不能分配给类型 'number'。
问题
我可能遗漏了一个简单的步骤,但编译器抱怨我输入为数字的累加器和输入为 Car 的汽车似乎给了我上面记录的错误。
我只是想知道为什么我不能将累加器的类型设置为数字。将来我应该如何在reduce函数中设置类型?
【问题讨论】:
-
可能是因为reduce的初始值是
0,不是car类型的? (真正的建议,不是答案) -
是的,我在想如果我将初始值设为一个数字,那么它将接受“数字”类型。将对此进行调查,非常感谢。
-
我认为我的建议是不正确的,因为 reduce 已经有累加器的数字类型
标签: javascript typescript types model reduce