Я пытаюсь сгладить массив и получаю сообщение об ошибке -- ошибка TS2769: этому вызову не соответствует ни одна перегрузка.
Я сделал это в stackblitz, и это сработало нормально.
Оператор спреда получает ошибку: ...this.selectedInstitutions
selectedInstitutions = [
[{ displayValue: 'ABC', id: 781 }],
[{ displayValue: 'DEF', id: 782 }],
];
ngOnInit() {
this.selectedInstitutions = [].concat(...this.selectedInstitutions);
}
Сообщение об ошибке:
2 ответа
При использовании [].concat(someValue)
пустой массив []
не имеет указанного типа и предполагается, что он имеет тип never[]
.
Из документов
Тип never присваивается каждому типу; однако никакому типу нельзя присвоить значение never (кроме самого never).
Поэтому, когда параметр машинописного текста strictNullChecks включен, вы получите сообщение об ошибке при попытке назначить любой другой тип на never[]
, что именно и происходит, когда вы делаете что-то вроде:
[].concat(...this.selectedInstitutions)
Вы можете преодолеть ошибку путем приведения типов как:
this.selectedInstitutions = ([] as any[]).concat(...this.selectedInstitutions);
PS: использование типа any
не рекомендуется, поэтому, если вы уже определили тип для selectedInstitutions
, используйте его при приведении типов.
Я не уверен, что вы пытаетесь сгладить. Ваши данные уже плоские, они имеют глубину всего 1 уровень (без внутренней вложенности). Объединение массива с данными в новый массив и присвоение его самому себе мало что дает, конечный результат всегда один и тот же, чего вы пытаетесь достичь?
В любом случае, добавление объявления типа должно решить проблему.
([] as string[]).concat('foo')
ngOnInit() {
this.selectedInstitutions = ([] as any[]).concat(...this.selectedInstitutions);
}
Вот рабочий пример: https:// stackblitz.com/edit/angular-ivy-scfukg?file=src%2Fapp%2Fapp.component.ts
Новые вопросы
angular
Вопросы по Angular (не путать с AngularJS), веб-фреймворку от Google. Используйте этот тег для угловых вопросов, которые не относятся к конкретной версии. Для более старой веб-платформы AngularJS (1.x) используйте тег angularjs.