2017-01-25 4 views
1

ich eine Typoskript Variable bin erklärt wie folgt:Typoskript erklären Variablentyp Wiederholung

let foo: any = this.someFunc(someArg); 

someFunc ist eine Funktion, deren Rückgabetyp übereinstimmt Typ des foo:

public someFunc(arg: any): any { 
    return {}; 
} 

Der Rückgabetyp ist ‚any‘ aber es könnte auch ein anderer Typ gewesen sein.

dass foo Erklärung gegeben werden, ohne Angabe der Art ausgedrückt haben:

let foo = this.someFunc(someArg); 

Sollte die erste Erklärung Beispiel falsch oder einen Fehler in Betracht gezogen werden?

Ich werde derzeit in einer Pull-Anfrage gesagt, dass dies falsch ist, weil es eine Wiederholung darstellt.

In meiner Sicht sind beide Verwendungen in Ordnung, der erste ist lesbarer und erzwingt den Rückgabetyp, der der deklarierten Variablen zugewiesen ist.

In Typoskript Code Samples habe ich beide Notationen gesehen.

Antwort

1

Es ist eine stilistische Entscheidung, die Ihr Team treffen muss.

Ja, es ist Wiederholung, da es vom Compiler abgeleitet werden kann; Es kann jedoch einfacher sein, sie für Entwickler zu schreiben, ohne sie durch eine Reihe von Funktionen durchgehen zu müssen (da someFunc seinen Typ von etwas anderem ableiten kann).

// The compiler knows that a is a number, developers will have to look 
// inside someFunc and otherFunc to know that 
const a = someFunc(); 
function someFunc() { 
    return otherFunc(); 
} 
function otherFunc(){ 
    return 1; 
} 

Additionaly, wenn Sie einen Fehler machen, wird der Compiler Ihnen sagen, so die Wiederholung von Typinformationen als Duplizieren eigentlichen Code nicht so schlecht ist.

FWIW, mein Team hat beschlossen, alles einzugeben, damit wir nicht weiter anrufen müssen, wenn wir etwas eingeben sollen. Die einzige Ausnahme besteht bei der Initialisierung eines Felds/einer Variablen mit new, und Sie benötigen den Typ nicht als Superklasse/Schnittstelle.

1

Der Compiler leitet basierend auf dem Rückgabetyp der Funktion den Typ foo ab, weshalb Sie ihn nicht explizit angeben müssen.

Es ist nicht falsch, noch ist es ein Fehler, es zu spezifizieren, es ist nur mehr ausführlich.
Manche Leute bevorzugen diesen ausführlichen Weg, weil es lesbarer ist, und einige denken, dass es überflüssig ist.

Sie müssen herausfinden, was Ihre Konventionen in Ihrem Team sind und darauf basierend arbeiten.

In manchen Situationen ist es sinnvoller es aber zu verwenden, zum Beispiel:

interface A { 
    x: number; 
} 

interface B extends A { 
    y: number; 
} 

function fn(): B { return null } 

let a: A = fn(); 
+0

Es ist nicht erforderlich, weil Sie 'a' als 'B' haben können, und es wird nur die gleichen –

+0

Leider, ich habe die Signatur von 'fn' falsch gelesen –