2017-07-20 4 views
3

enter image description here Immer, wenn ich die Ausbreitung Operator wie untenTypeScript-Fehler bei Verwendung des Spread-Operators?

public drawTextTest(p1: number, p2: number, p3: number):void { 
    console.log(p1, p2, p3); 
} 
let array = [2, 2, 5]; 
this.drawTextTest(... array); 

ich diesen Fehler im Editor

[ts] Erwartete # Argumente, bekam aber ein Minimum von 0.

Warum gibt TypeScript einen Fehler bei der Verwendung des Spread-Operators zum Übergeben von Argumenten?

Es gibt keinen Fehler, wenn ich den Code tatsächlich ausführe, der Spread-Operator lässt mich einfach das Array als Argumente für eine Funktion verwenden, in VSCode zeigt es mir den Fehler, als ob ich nicht könnte.

+2

Bitte fügen Sie Code statt Screenshot ein. –

+0

Der Code läuft gut, wenn kompiliert, ich bekomme nur einen Fehler, während ich im Editor bin. – LatteDrift

+2

tslib Version von vscode ist älter und kann das Tupel nicht ableiten –

Antwort

0

Vscode verwendet möglicherweise eine Version von Typoskript vor 2.1, um den Code zu bewerten. Überprüfen Sie die Version unten rechts in Ihrem IDE-Fenster.

Wenn ich falsch liege, muss ich die Objektdefinition drawInfo sehen. Meine zweite Vermutung ist, dass drawInfo über optionale Eigenschaften verfügt und der Evaluator die Möglichkeit sieht, dass der Spread zu 0 Params führen würde.

EDIT: drawInfo scheint ein Array zu sein. Da die Länge von Arrays geändert werden kann und nichts garantiert, dass es 3 Eigenschaften gibt, wird sich der ts-Evaluator beschweren.

Wenn die drawInfo immer 3 Werte enthält, möchten Sie sie möglicherweise von einem Array zu einem definierten Typ ändern und den Spread-Operator vermeiden.

+0

VSCode läuft auf TypeScript 2.4.2. Ich aktualisierte das Beispiel, das ich gab, wo ich noch den Fehler – LatteDrift

2

Neuere Versionen von Typoskript sollte dies aus durch Flow-Analyse werden herauszufinden, aber Sie sollten den Code arbeiten, indem Sie manuell eingeben das Array auf die folgende Art und Weise zu erhalten Lage sein, die Mindestlänge zu gewährleisten:

function drawTextTest(p1: number, p2: number, p3: number):void { 
    console.log(p1, p2, p3); 
} 
let array: [number, number, number] = [2, 2, 5]; 
this.drawTextTest(... array); 
+1

bekomme. Dieses ist mehr entlang der Linien von, was ich dachte, aber TS gibt immer noch gibt den gleichen Fehler – LatteDrift

Verwandte Themen