#typescript #reduce
Вопрос:
У меня есть простой пример, такой как
interface employer {
name: string;
age: number;
}
const arr: employer[] = [{name:'Amy',age:18},{name:'Bob',age:20}];
let data = arr.reduce((c, b) => b.age > 18 ? [...c, b] : c,[])
console.log(data)
Я просто хочу arr
заполнить массив и вернуть возраст человека выше 18, например
Но я получаю ошибки
No overload matches this call.
Overload 1 of 3, '(callbackfn: (previousValue: employer, currentValue: employer, currentIndex: number, array: employer[]) => employer, initialValue: employer): employer', gave the following error.
Type 'employer[]' is missing the following properties from type 'employer': name, age
Overload 2 of 3, '(callbackfn: (previousValue: never[], currentValue: employer, currentIndex: number, array: employer[]) => never[], initialValue: never[]): never[]', gave the following error.
Type 'employer[]' is not assignable to type 'never[]'.
Type 'employer' is not assignable to type 'never'.
Для этого b.age > 18 ? [...c, b] : c
Я думаю, что это сработало для javascript
Как мы можем это исправить?
Спасибо
Ответ №1:
Чтобы исправить эту ошибку, вам нужно добавить тип в reduce
функцию. Вы можете сделать это, позвонив
let data = arr.reduce<employer[]>((c, b) => b.age > 18 ? [...c, b] : c,[])
кроме того, это действительно
let data = arr.reduce((c, b) => b.age > 18 ? [...c, b] : c,[] as employer[])
но я думаю, что первый выглядит лучше.
Вы можете найти рабочий пример на этой игровой площадке
Ответ №2:
Я пробую другой способ
interface employer {
name: string;
age: number;
}
const arr: employer[] = [{name:'Amy',age:18},{name:'Bob',age:20}];
let data = arr.reduce((c:any, b:any) => b.age > 18 ? [...c, b] : c,[])
console.log(arr)
Комментарии:
1. Однако с этим вы теряете безопасность типа
2. Почему вы думаете, что это неправильно @GeorgiosKampitakis?
3. Использование any нарушает цель использования типов, если вы сделаете
arr.reduce((c:any, b:any) => b.wrong > 18 ? [...c, b] : c,[])
это, все равно произойдет компиляция, но возникнет ошибка времени выполнения,b.wrong
существующая в любом типе.