angular - Typescript aldrig typfel under instansiering av BehaviorSubject (never[] kan inte tilldelas)


I mitt Angular-projekt försöker jag initiera en BehaviorSubject-egenskap med en tom array:

export class Buffer {

  $items: BehaviorSubject<Array<Item>>; // or <Item[]>
  private _items: Array<Item>; // or Item[]

  constructor(settings: Settings) {
    this.$items = new BehaviorSubject([]);
  }
}

TypeScript-kompilatorn kastar följande fel:

fel TS2322: Typen 'BehaviorSubject<never[]>' kan inte tilldelas typen 'BehaviorSubject<Item[]>'

Jag har försökt läsa om typen "never" och jag förstår inte varför jag får ett sådant fel. Dessutom, om jag ersätter $items-instansen med this.$items=new BehaviorSubject(new Array()) kommer det inte att bli något fel. Men min IDE varnar mig riktigt i det fallet: "Array-instansiering kan förenklas".

Vad är problemet och vad ska jag göra här? Jag använder TypeScript 2.7.2.

Svar #1

Du behöver explicit vidarebefordra typparametern till konstruktorn

this.$items = new BehaviorSubject<Item[]>([]);

Om kompilatorn inte har någon annan information kommer [] att tolkas som never[]

Relaterade artiklar