Kann TypeScript mich vor überflüssigen Verwendungen des Nicht-Null-Assertionsoperators warnen?

8

Betrachten Sie den folgenden TypeScript-Code:

%Vor%

Hier ist der abgeleitete Typ von x.foo { bar: string } , und daher ist die Verwendung des Nicht-Null-Assertionsoperators ! nicht erforderlich (siehe z. B. Ссылка ): der Compiler bereits weiß, dass x.foo nicht null sein kann.

Kann mich tsc (oder möglicherweise ein weit verbreitetes Tool von Drittanbietern wie TSLint) vor diesen überflüssigen Verwendungen von ! warnen und / oder ist das ein geplantes Feature?

Ich bin mir sicher, dass dies prinzipiell machbar ist (es scheint, als würde es nur darum gehen, die TypeScript-Compiler-API zu verwenden, um Orte zu identifizieren, an denen ! für Variablen verwendet wird, deren Typ nicht T | null oder T | undefined ist ); Ich frage mich nur, ob das schwere Heben schon gemacht wurde. Oder, ich denke, ein Zeiger auf die relevanten Teile der TypeScript-Compiler-API würde auch funktionieren - es ist schwierig, eine Dokumentation dafür zu finden (ich denke, weil es noch nicht stabil ist).

(Der Grund, warum ich frage, ist, dass ich befürchte, dass ich am Ende mit Code umgehen muss, wenn an mir vorbeikommt irgendein Idiot überall ! gesprengt hat, um tsc --strictNullChecks stop zu machen Fehler werden ausgegeben, ohne dass tatsächlich darüber nachgedacht wird, ob die angegebene Variable zur Laufzeit nicht null ist. Wenn sie zur Laufzeit null ist, voila! Ein Fehler, den wir zur Kompilierzeit hätten auffangen können, aber nicht wegen übereifrigen ! . Das Vorhandensein von ! s auf Variablen, von denen bereits bekannt ist, dass sie nicht null sind, würde stark darauf hinweisen, dass der Code ! wahrscheinlich falsch verwendet.)

    
senshin 03.01.2017, 22:47
quelle

1 Antwort

0

Nein, es scheint momentan nicht so zu sein. Im Interesse, in die Codebasis des Compilers zu kommen, habe ich es auf meiner Gabel hier gemacht: Ссылка

Sie können es ausführen, indem Sie den Repo klonen und diese Version des Compilers verwenden - vergessen Sie nicht, strictNullChecks zu aktivieren:)

    
Michael Sondergaard 30.01.2017 14:27
quelle

Tags und Links