Ich verwende einen Wächter TypScript in einem ternären Operator innerhalb einer Schleife und sehe ein Verhalten, das ich nicht verstehe.TypeScript Typ Wächter Oddity
Meine Schnittstellen
interface INamed {
name: string;
}
interface IOtherNamed extends INamed {
otherName: string;
}
Mein Typ-Schutz
function isOther(obj: any): obj is IOtherNamed {
... // some check that returns boolean
}
Allgemeine Anwendungsbeispiel
var list: Array<{named: INamed}> = [];
for(let item of list) {
var other: IOtherNamed = ...
}
Innerhalb meiner for .. of Schleife benutze ich meinen Typwächter, um entweder einer Variablen von IOtherNamed mein aktuelles Objekt oder null zuzuweisen. Meine Fragen
- Ist das durch Design, das eines dieser Werke wh Ile der andere nicht?
- Wenn von Entwurf, was ist die Nuance hier bestimmt, wenn es funktioniert oder nicht? Warum wird der Compiler-Fehler durch das Zuweisen des Objekts an eine neue Variable (ohne Änderung des Typs) beseitigt?
funktioniert das nicht
// Compiler Error: INamed is not assignable to IOtherNamed
for(let item of list) {
var other: IOtherNamed = isOther(item.named) ? item.named : null;
}
Diese
for(let item of list) {
var named: INamed = item.named;
var other2: IOtherNamed = isOther(named) ? named : null;
}
tut
Danke, genau die Informationen, die ich brauchte. – bingles
Und wird in TS 2.0 behoben: https://github.com/Microsoft/TypeScript/issues/3812 – Alex