2016-07-27 7 views
6

ich verwende typescript2.0.0 mit --strictNullChecks und die folgende Typ-Schutz:Inverse Typoskript Typ-Schutz

function isNotOk(value: any): value is null | undefined { 
    if (typeof value === 'number') { 
    return !isFinite(value); 
    } else { 
    return value === null || value === undefined; 
    } 
} 

Welche null in Abrede stellen, undefined, NaN und Infinite. Ich möchte eine Umkehrung davon:

export function isOk(value: any): value is not null | undefined { 
    return !isNotOk(value); 
} 

Natürlich funktioniert diese Syntax nicht. Gibt es einen bekannten Weg, dies zu erreichen?

+0

haben Sie strenge Null-Überprüfung eingeschaltet? –

+0

Ja, 'strictNullChecks' ist aktiviert. Ich werde die Frage aktualisieren, um zu klären. –

+0

Warum wird {return (typeof value === 'number') nicht zurückgegeben? isFinite (Wert): (Wert! == null && Wert! == undefiniert);} Arbeit? Gibt es ein Problem mit den Null-Checks? –

Antwort

9

Ich stolperte über die Antwort; Generika. Nur in umgekehrter Weise wie folgt schmal:

function isOk<T>(value: T | null | undefined): value is T { 
    return !isNotOk(value); 
} 
+1

Das einzige Problem ist, wenn 'T'' any' ist - dann denkt der 'else' Teil des Typs guard dass' value' 'nie' ist, aber es sollte wirklich' null | sein undefiniert. –