Ich habe zwei unionierte Typen, einer hat eine Eigenschaft und der andere nicht. Ich ging davon aus, dass die Überprüfung der Existenz dieser Eigenschaft es mir erlauben würde, sie einzugrenzen, aber es funktioniert nicht.Eingeschränkter einfacher TypeScript-Union-Typ mit nicht definierter Eigenschaft
Ich habe erstellt this Playground repro. Diese andere very similar thing scheint gut zu funktionieren. Benutze ich die Gewerkschaften falsch?
Hier ist der Code für die der Vollständigkeit halber:
export interface AuthenticatedProfile {
readonly userId: string;
readonly name: string;
}
export interface AnonymousProfile {
readonly userId: undefined;
readonly otherProp: string;
}
export type Profile = AnonymousProfile | AuthenticatedProfile;
function handleProfile(prof: Profile) {
if (prof.userId) {
console.log(prof.name);
}
}
Dank!
Ihre Lösung sieht gut aus. Ich habe nur eine Frage: Wenn die Eigenschaft userId Teil beider Typen ist und jeder Typ nur eine disjunkte Menge von Werten annehmen kann, warum kann dann TypScript den Typ nach meiner ursprünglichen Prüfung nicht ableiten? –
für mich Aufruf 'prof.userId' funktioniert gut ohne jede Art Wachen. – toskv
Es scheint tatsächlich ein bekanntes Problem zu sein. https://github.com/Microsoft/TypeScript/issues/12600. Ich weiß nicht, warum Sie den Fehler nicht sehen, es ist genau dort in der Spielplatz-Repro, die ich –