2013-09-05 9 views
28

Ich habe ein Szenario, in dem ich eine Schnittstelle, die eine Methode, wie so hat:Typoskript - Standardparameter auf Klasse mit Schnittstelle

interface SomeInterface 
{ 
    SomeMethod(arg1: string, arg2: string, arg3: boolean); 
} 

Und eine Klasse wie so:

class SomeImplementation implements SomeInterface 
{ 
    public SomeMethod(arg1: string, arg2: string, arg3: boolean = true){...} 
} 

Nun das Problem ist Ich kann nicht sagen, die Schnittstelle, die dritte Option sollte optional sein oder einen Standardwert haben, als ob ich versuche, die Schnittstelle gibt es einen Standardwert ist Ich bekomme den Fehler:

TS2174: Default arguments are not allowed in an overload parameter.

Wenn ich die Standard von der Schnittstelle weglassen und ruft es etwa so:

var myObject = new SomeImplementation(); 
myObject.SomeMethod("foo", "bar"); 

Es beschwert sich, dass die Parameter übereinstimmen keine Überschreibung. Also gibt es eine Möglichkeit, Standardwerte für Parameter zu haben und von einer Schnittstelle zu erben. Es macht mir nichts aus, wenn die Schnittstelle auch den Wert als Standard haben muss, da es immer ein optionales Argument sein wird.

Antwort

56

Sie können die Parameter definieren optional zu sein, mit ?:

interface SomeInterface { 
    SomeMethod(arg1: string, arg2: string, arg3?: boolean); 
} 
+0

oh Ich dachte, das für den Standardwert in einen der letzten Versionen entfernt wurde. Also kann ich das optionale Argument im Argument interface und default value in der Klasse verwenden? – Grofit

+0

Sie können immer noch optionale Argumente ohne Standardwerte verwenden. Das einzige nicht erlaubte Ding ist die redundante Syntax 'x? = 4' - Sie können entweder den'? 'Oder den Standardwert haben. –

+6

Und Vorsicht, wenn Sie 'SomeMethod (' foo ',' bar ') aufrufen '' '' arg3'' Parameter ist 'undefiniert' und nicht' null'. – vegemite4me