2017-08-28 5 views
0

ich über mehrere verschiedene Instanzen von Code gekommen sind, wo Variablen mit einem expliziten Typ deklariert werden, obwohl die abgeleitete Typ liegt auf der Hand:Typ-Inferenz vs. explizite Typdeklaration in Typoskript

Beispiel: loading: boolean = false oder name: string = "John" oder count: number = 0 usw. .

TSLint bevorzugt den abgeleiteten Typ gegenüber dem expliziten Typ, also frage ich mich, ob das nur ein stilistisches Problem ist? Sind diese expliziten Typen sogar zur Laufzeit von Bedeutung?

Antwort

0

In Ihrem Beispiel geht es nur um Stil, daher hat es keinen Einfluss auf Ihren Code aus Kompilierungsperspektive. Beachten Sie, dass dies für die Fälle gilt, in denen der Variablenwert explizit seinen Typ definiert, was Ihren Code in Fällen von resignierenden Werten aus anderen Variablen kompliziert zu lesen macht.

Mit anderen Worten könnte es besser sein, das Sie tun:

name: string = "John" 
bday: Date = "1980/01/10" //the compiler says there is an error 

Und vermeiden:

name = "John" 
bday = "1980/01/10" //no compiling error, but it should be new Date("1980/01/10") 

Hinweis: Nicht definierte Typen werden immer als jeder in Betracht gezogen werden.

+0

Obwohl es wahr ist, dass Ihr Datumsbeispiel keinen Fehler ergibt, wenn bday eigentlich ein Date sein sollte, möchten Sie auf einige Date-Eigenschaften zugreifen oder sie als Parameter verwenden, wobei der Parameter ein Date ist. was zu einem Fehler führen wird. Ich persönlich bevorzuge Typinferenz wo möglich, aber es könnte nur meine Faulheit sein :) –

+0

Mein Punkt war, in beiden Fällen die Möglichkeit eines Fehlers zu zeigen. Es ist sehr häufig bedingte Fehler nur aufgrund von Attributtypen. Ich bevorzuge es, so wenig wie möglich zu schreiben, aber ich weiß, dass es meinen Code schwerer macht, gelesen zu werden. – Cleriston

0

Deklarierte Typen spielen zur Laufzeit keine Rolle. Wenn das Javascript generiert wird, werden alle Typen entfernt, da JavaScript die Angabe von Variablentypen nicht unterstützt.

Warum TSLint Typinferenz über explizite Typisierung bevorzugt, würde ich sagen, es ist wahrscheinlich, die Dinge trocken zu halten (wiederholen Sie sich nicht). Da der Compiler die Eingabe für Sie vornehmen kann, gibt es keinen Grund, dem Code mehr Rauschen hinzuzufügen.

Verwandte Themen