Угловой ngFor с асинхронным каналом, сообщает, что аргумент имеет тип null

#angular #typescript #async-pipe

Вопрос:

В чем причина этого сообщения

 Argument of type '[string, { startTime: string; endTime: string; }][] | null' is not assignable to parameter of type 'Collection<unknown>'.
 

когда я пытаюсь использовать async трубу в ngFor цикле :

  <div *ngFor="let slotDay of slots | async | paginate: { id: 'pagination', itemsPerPage: 3, currentPage: p }">
 

со слотом, являющимся:

 aaa: Subject<[string, {startTime: string, endTime: string}][]> = new Subject();
 

Означает ли это, что Angular предполагает, что Субъект может вернуть нулевое значение? Как решить эту проблему?

Спасибо!

Комментарии:

1. Что именно Subject<x> здесь находится? Не могли бы вы показать код для этого? Очевидно, что существует несоответствие типов между x и Collections<Unknown>

2. Может кто-нибудь сказать мне, что это за массив [string, {startTime: string, endTime: string}][]

Ответ №1:

проверьте свою трубу paginate .Эта труба должна быть получена в качестве аргумента null или массива и возвращать массив (пустой, если хотите). можете ли вы отредактировать свой вопрос, добавив страницу разбиения на страницы?.

Вы также можете попытаться сделать свой код в два этапа

 <ng-container *ngIf="slots|async as slotsAsync">
   <div *ngFor="let slotDay of slotsAsync | 
           paginate: { id: 'pagination', itemsPerPage: 3, currentPage: p }">
    ...
   </div>
</ng-container>
 

Примечание: для соглашения переменные, которые были наблюдаемыми, называются, заканчивающимися на$, лучше stols$, чем слоты (это не обязательно, но помогает отменить для всех)