2017-01-22 1 views
1

fehlt. Betrachten wir diesen Code. TypeScript kann nicht erkennen, dass ein Fehler vorliegt.TypeScript kann den Nullzeiger nicht erkennen, wenn der Schlüssel in Objekt

let map: { [key: string]: string } = {} 
map['key'].toUpperCase() 

Gibt es eine Möglichkeit, das zu beheben?

P.S.

Es gibt etwas andere Form

let map: { [key: string]: string | null } = {} 

Aber, es ist nicht genau das, was ich will. Ich möchte festlegen, dass

key may not exist, but if it exists it's a string 

und diese Form gibt

key may not exist, but even if it exists, it could be a string or null 

Antwort

1

Ich werde vorschlagen, dass eine bessere Form ist: Key is always accessible, and the value is string or undefined. Denn das ist, was die Natur von Javascript Ihnen geben wird.

Und Sie können, dass durch T | undefined definieren:

let map: { [key: string]: string | undefined } = {} 

var hopefullyString = map['key']; 
if (hopefullyString != undefined) 
    return hopefullyString.toUpperCase(); 

Wenn Typoskript ein solidere Typ-System haben würde, hätte die durch die strictNullChecks -Kennzeichen in der Compiler-Konfiguration aktiviert. Im Bemühen um allgemeine Benutzerfreundlichkeit machen sie hier und da jedoch einige unsaubere Design-Entscheidungen. Und das ist leider einer dieser Fälle, mehr Hintergrund here.

Verwandte Themen