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[]
