2016-06-01 10 views
3

In TypeScript kann ich so etwas tun, damit eine Variable implizit basierend auf einer anderen Variablen typisiert wird.Deklarieren von Typ basierend auf Variable

var json = {foo: 1}; 
var someTypedVariable = json; // Assignment gives implicit type 

someTypedVariable.bar = 1; // Error 
someTypedVariable.foo = 1; // Good 

Aber gibt es eine Möglichkeit, das gleiche Ergebnis ohne Zuweisung zu erreichen? Ich weiß, was ich tun kann:

var someTypedVariable: {foo:number}; 

Aber was ist so etwas wie:

var json = {foo: 1}; 
var someTypedVariable: json; // Explicitly typing without assignment 

Gibt es eine Möglichkeit, dies zu erreichen?

Warum versuche ich das? Ich habe einige große JSON-Strukturen, die ich überprüfen möchte. Es ist einfach, die Beispieldaten in eine ts-Datei zu schreiben, und wenn ich diese Daten einer Variablen zuweise, erhalte ich eine Typprüfung für diese Variable. Ich möchte keine Klassenstruktur für den JSON beibehalten - ich möchte einfach (wenn sich die JSON-Struktur ändert) die neue JSON-Datei kopieren und in mein Projekt einfügen und sehen, ob einer meiner abhängigen Code-Unterbrechungen auftritt.

Antwort

5

Sicher, es gibt einen Weg! Wie the related proposal of type queries ist bereits umgesetzt:

var json = {foo: 1}; 
var someTypedVariable : typeof json; // type query, not the string "object" 

someTypedVariable.bar = 1; // Error 
someTypedVariable.foo = 1; // Good 

Eine Sache zu beachten ist, dass die typeof Betreiber im Rahmen eines Typs Ausdruck eine Art Abfrage ist, und bedeuten nicht die gleichen wie typeof in einem einfachen Ausdruck.

Sie können es in der TypeScript playground versuchen.

+0

Funktioniert hervorragend! – Eric