2016-03-29 11 views
1

In Typoskript Sie eine boolesche Variable auf verschiedene Weise definieren können zB:Typoskript Konvention für Typen in variable defintions

let a = true; 

let b: boolean = true; 

Da true bereits ein boolean ist, ist es immer noch üblich als Variablentyp zu definieren (wie dargestellt für b)?

Wenn ja, gilt das gleiche für alle primitiven Typen?

Antwort

1

Typoskript implizit Variablen-Typen auf der Grundlage der ursprünglichen Zuweisung (Read more). So sind die beiden hier Variablen sind beide als boolean getippt:

let a = true;   // implicitly typed as boolean 
let b: boolean = true; // explicitly typed as boolean 

Beide Fehler wird, wenn eine andere Art zuweisen:

a = "a string";  // error, type 'string' is not assignable to type 'boolean' 
b = "a string";  // error, type 'string' is not assignable to type 'boolean' 

Es gibt keine Konvention für, ob Sie explizit oder implizit sein sollte, aber ich würde sehr empfehlen, die Ausführlichkeit von let a: boolean = true; fallen zu lassen. Es ist kürzer, stattdessen let a = true; zu schreiben. Die Zuweisung zeigt den Typ bereits deutlich an, so dass es nicht nötig ist, explizit zu sein und das zweimal zu sagen.

Implizite Anys

Sie sollten für "implizite alle Arten" aufpassen. Dies geschieht, wenn es keine Zuordnung in der ersten Stellungnahme ist und kein Typ angegeben:

let a; // implicitly typed as `any` 

Diese Variable kann in einer Weise verwendet werden:

a = true;  // ok 
a = "a string"; // ok 

In diesem Fall sollten Sie über den Typ explizit sein :

let a: boolean; 
a = true;  // ok 
a = "a string"; // error, type 'string' is not assignable to type 'boolean' -- good! 

Sie vollständig --noImplicitAny, indem der Compiler-Option versehentlich definieren implizit alle Arten vermeiden kann, die einen Compiler-Fehler erhöhen, wenn Sie d o ja. Ich empfehle, dies zu aktivieren.

let a; // compile error with `--noImplicitAny` 
+0

Haben Sie eine Quelle, in der TypScript tatsächlich Variablen implizit basierend auf der ursprünglichen Zuweisung eingibt? Da ich keinen finden konnte :) –

+0

@osi ja, siehe [hier] (http://www.typescriptlang.org/docs/type-inference.html). –

+1

@osi auch, können Sie den Code testen. Sie werden sehen, dass das, was in der aktuell ausgewählten Antwort gesagt wird, falsch ist, weil es keine Typrückschlüsse berücksichtigt. –

2

In der Tat, mit der ersten Ansatz, definieren Sie keinen Typ (für TypeScript), so dass Sie möglicherweise setzen was Sie wollen in der a Variable als Wert. Vergiss nicht, dass JavaScript dynamisch ist. Außerdem können Sie bei der Kompilierung nicht prüfen, ob bei Verwendung der Variablen der richtige Typ angegeben ist.

du haben könnte:

let a = true; 
a = 'test'; 

Mit dem zweiten Ansatz können Sie bei der Kompilierung überprüfen, ob der Typ des b ist genau das, was zu erwarten ist: wenn sie als Parameter einer Methode verwendet, wenn betroffen Eine weitere Eigenschaft der Variablen

Es ist besser, die starke Typisierung von TypeScript für die statische Überprüfung zu nutzen. Dadurch können Sie mögliche Probleme während der Implementierungsphase (und nicht zur Laufzeit) leicht erkennen.

Zum Beispiel:

let a:boolean = true; 
a = 'test'; // compilation error 
Verwandte Themen