2017-09-13 1 views
0

Mit Typescript finde ich, warum zwei verschiedene Funktionen, die verschiedenen lokalen Variablen zugewiesen sind, unterschiedliche Signaturen ergeben. Ich dachte, man wäre nur expliziter.Warum unterscheiden sich diese zwei Funktionstypen in Typoskript?

let a: (number)=>number = 
    function(x: number): number {return 42;}; 

let z = function(x:number): number { return 42; }; 

> .type a 
let a: (number: any) => number 
> .type z 
let z: (x: number) => number 

Ich dachte a nur eine explizitere Version des Schreibens z, war aber irgendwie wird es als zu akzeptieren any zügige getippt.

Typoskript Version Mit 2.5.2

Antwort

3
let a: (number)=>number 

Der Parametername erforderlich ist. Das ist genau entspricht:

let a: (number: any)=>number 

Mit anderen Worten, die erste number hier definiert ein Parameter mit dem Namen "number"

Was Sie brauchen, ist,

let a: (x: number)=>number = 
    function(x: number): number {return 42;}; 

Der Name, x ist egal.

+0

ah, also haben Sie es benannt, oder es wird angenommen, dass es sich um einen Namen mit einem beliebigen Typ handelt. Das ist ziemlich dumm. Und der Name spielt keine Rolle für die Typchecking? –

+1

Der Name spielt keine Rolle –

+1

FWIW: Es muss so sein, um die Kompatibilität mit JavaScript zu erhalten. – Pace

Verwandte Themen