2013-09-05 30 views
28

Mam scenariusz, gdzie mam interfejs, który ma metodę tak:maszynopis - domyślne parametry w klasie z interfejsem

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

oraz klasę tak:

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

Teraz problem czy nie mogę powiedzieć interfejsowi, że trzecia opcja powinna być opcjonalna lub mieć wartość domyślną, tak jakbym próbowała powiedzieć interfejsowi, że istnieje domyślna wartość. Otrzymuję błąd:

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

Jeśli pominąć domyślne z interfejsu i wywołuje go tak:

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

Zarzuca, że ​​parametry nie znaleziono żadnych nadpisanie. Więc istnieje sposób, aby móc mieć domyślne wartości parametrów i dziedziczyć z interfejsu, nie mam nic przeciwko, jeśli interfejs musi mieć również wartość domyślną, ponieważ zawsze będzie opcjonalnym argumentem.

Odpowiedz

56

Można zdefiniować parametr być opcjonalnie z ?:

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

oh Myślałem, że ten został usunięty na rzecz wartości domyślnej w jednej z ostatnich wersji. Czy jestem w stanie użyć opcjonalnego argumentu w interfejsie i argumentu wartości domyślnej w klasie? – Grofit

+0

Możesz nadal używać opcjonalnych argumentów bez ustawień domyślnych w dowolnym miejscu. Jedyną niedozwoloną rzeczą jest zbędna składnia 'x? = 4' - możesz mieć wartość'? 'Lub wartość domyślną. –

+6

I uwaga, jeśli wywołasz 'SomeMethod ('foo', 'bar')' parametr 'arg3' będzie miał wartość' undefined', a nie 'null'. – vegemite4me