typescript 行为主体〈any[]>抛出类型“any[]|“null”不能赋给类型“any[]”错误[duplicate]

f2uvfpb9  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(295)
    • 此问题在此处已有答案**:

async pipe sends 'null' value to the child component(5个答案)
16小时前关门了。
将存储在我的CacheService中的BehaviorSubject传递给需要any []的组件@Input()时,出现错误any []|键入'any []|null 'is not assignable to type' any []'错误被抛出,即使行为主体在服务中使用空数组的默认值示例化,我不确定为什么会发生这种情况,下面是我的应用程序的删节版本,以重现这个问题,任何帮助将不胜感激。

    • 应用程序.组件. html**
<app-custom-select [options]="this.items$ | async"></app-custom-select>
    • 应用程序组件. ts**
import { Component } from '@angular/core';
import { FormControl, FormGroup } from '@angular/forms';
import { BehaviorSubject, ReplaySubject, Subject } from 'rxjs';
import { CacheService } from './services/cache.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent 
{
    items$ = this.cache.items.data$;
    constructor(private cache: CacheService) {}
}
    • 缓存服务ts**
import { Injectable } from '@angular/core';
import { CacheArray } from '../models/CacheArray';

@Injectable({
  providedIn: 'root'
})
export class CacheService 
{
    items = new CacheArray<any>();
}
    • 缓存. ts**
import { BehaviorSubject, Observable } from "rxjs";

export class CacheArray<T>
{
    data$ = new BehaviorSubject<T[]>([]);

    load(obs: Observable<T[]>)
    {
        obs.subscribe((items: T[]) => {
            this.data$.next(items);
        });
    }
}
    • 自定义选择.组件. ts**
import { Component, Input, OnInit } from '@angular/core';

@Component({
  selector: 'app-custom-select',
  templateUrl: './custom-select.component.html',
  styleUrls: ['./custom-select.component.scss']
})
export class CustomSelectComponent
{
    @Input()
    options: any[] = [];
}

我希望不会抛出错误

dxxyhpgq

dxxyhpgq1#

BehaviorSubject是一个为所有订阅者分配最新值的主体,当我们创建行为对象时,我们也必须为对象分配初始值。
因此,如果此错误类似于您的初始值是某个any[],并且您尝试在更新对象时分配null值,则可能出现此错误。
如果在BehaviourSubject中赋值之前添加检查,则可能会解决错误

if(items != null) {
    this.data$.next(items);
}

相关问题