2015-12-11 7 views
21

Ich habe eine große TypeScript-Klasse programmiert und noImplicitAny auf true gesetzt. Gibt es eine Möglichkeit, mehrere Variablen desselben Typs in derselben Zeile zu deklarieren?Mehrere TypeScript-Variablen mit demselben Typ deklarieren

Ich möchte x und y als Zahlen mit etwas wie "x, y: number" deklarieren. Aber der Compiler mag das nicht oder irgendetwas anderes, das ich versucht habe. Gibt es eine bessere Alternative zu "x: number; y: number"?

Antwort

21

Es gibt keine Syntax, die dies besser erreichen würde, als den Typ zweimal zu schreiben.

+12

Vielen Dank. Das ist eine Schande. Für Web-Komponenten mit vielen Variablen ist das Deklarieren jeder in einer separaten Zeile ein Schmerz. Dies gilt insbesondere für formularbasierte Komponenten. – user934904

-2

Anmerkungen: string = '', signatureTypeName = '';

+0

Dies definiert 'signatureTypeName' nicht explizit als 'string'; es ist implizit eine "Zeichenkette", weil dies der Typ des ersten Werts ist, der ihm zugewiesen ist. Sie könnten zunächst alles zu "signatureTypeName" zuweisen und es würde kompilieren. Zum Beispiel könnte man "let a: string =" ", b = 4" gemacht haben, was die Frage von OP besiegt, wo er/sie erklärte, dass beide Variablen vom selben Typ sein sollen. – mgthomas99

0

Wenn Sie eine verwaiste Variable akzeptieren können. Array destructuring kann dies tun.

var numberArray:number[]; //orphan variable 
var [n1,n2,n3,n4] = numberArray; 
n1=123; //n1 is number 
n1="123"; //typescript compile error 

Update: Hier ist die Javascript-Code generiert, wenn ECMAScript Targeting 6.

var numberArray; //orphan variable 
var [n1, n2, n3, n4] = numberArray; 
n1 = 123; //n1 is number 

JS-Code generiert, wenn ECMAScript Targeting-5, wie Louis unter sagte, ist es nicht schön ist.

var numberArray; //orphan variable 
var n1 = numberArray[0], n2 = numberArray[1], n3 = numberArray[2], n4 = numberArray[3]; 
n1 = 123; //n1 is number 
+0

Sie können die verwaiste Variable eliminieren, indem Sie 'var [n1, n2, n3, n4] = [] als Zahl [];' aber ich bin immer noch kein Fan von diesem Ansatz, ob mit Ihrem Code oder mit meiner Modifikation , 'tsc' erzeugt 4 nutzlose Zuweisungen für die Zeile' var [n1, n2, n3, n4] = ... '. – Louis

1

Hinzufügen Nur, dass selbst wenn Sie Folgendes tun:

let notes, signatureTypeName: string; 

es immer noch nicht funktioniert. In diesem Fall werden Notizen als Typ any und signatureTypeName als Typ string deklariert. Sie können dies alles überprüfen, indem Sie den Mauszeiger über die Variable bewegen, z. B. in Visual Studio Code. Der deklarierte Typ erscheint dann in einem Popup.

Verwandte Themen