2016-05-22 27 views
0

Ich habe diese drei Funktionen, die mit Ausnahme einiger sehr geringe Unterschiede nahezu identisch sind:mit Anmerkungen versehen mit einer Funktion einer Variablen zugewiesen in Typoskript und TSLint

function toInt1(x: string): number { return parseInt(x, 10); } 

const toInt2 = function (x: string): number { return parseInt(x, 10); }; 

const toInt3 = (x: string): number => parseInt(x, 10); 

Jetzt neu Ich bin zu Typoskript, aber in JS Land , Bevorzuge ich das dritte, weil es am prägnantesten und restriktivsten ist (no this, kein Hochziehen des Funktionsnamens).

aber wenn ich tslint mit dieser Regel (die auf der Oberfläche scheint vernünftig, aber vielleicht bin ich falsch, dass etwa ...):

"typedef": [ 
    true, 
    "call-signature", 
    "parameter", 
    "arrow-parameter", 
    "property-declaration", 
    "variable-declaration", 
    "member-variable-declaration" 
], 

ich diese Fehler über die toInt2 und toInt3 erhalten:

expected variable-declaration: 'toInt2' to have a typedef 
expected variable-declaration: 'toInt3' to have a typedef 

Scheint ich es durch Duplizieren alle Arten zu beheben:

const toInt2: (x: string) => number = function (x: string): number { return parseInt(x, 10); }; 
const toInt3: (x: string) => number = (x: string): number => parseInt(x, 10); 

Dies ist jedoch sehr ausführlich und unansehnlich. Ist das wirklich der beste Weg, Dinge zu tun?

Antwort

1

Der transpiler möchte jedem Namen (Variable) einen Typ zuordnen. Im Allgemeinen kann es herausfinden (folgern) diese Art von einer Zuweisung:

// const x: number = 10; 
const x = 10; 
// const y: string = 'foo'; 
const y = 'foo'; 
// const z: (a: string) => number = (a: string) => parseInt(a); 
const z = (a: string) => parseInt(a); 

Diese Regel 'variable-declaration' stellt sicher, dass Sie nicht das sind, lassen den Typen Transpiler schließen, aber Sie sind die Art Signaturen für jeden var ausdrücklich schriftlich , let oder const Erklärung (soweit ich in den Dokumenten sehen kann). Dies kann die Lesbarkeit verbessern (der Leser Ihres Codes kennt den statischen Typ jeder Variablen ohne weitere Untersuchung), aber auf Kosten des Schreibens der Typ-Signaturen für alle Variablen.

Nun ist diese zu lösen, haben Sie 2 Möglichkeiten:

  1. Deaktivieren Sie die Regel inline, wo immer angemessen
  2. eine custom rule schreiben für