2013-09-05 2 views
28

У меня есть сценарий, где у меня есть интерфейс, который имеет метод, как так:Машинопись - по умолчанию параметры на класс с интерфейсом

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

и класс вроде так:

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

Теперь проблема я не могу сказать интерфейс, что 3-й вариант должен быть факультативным или иметь значение по умолчанию, как если бы я пытался сказать, что интерфейс имеет значение по умолчанию, я получаю ошибку:

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

Если я опускаю по умолчанию из интерфейса и вызывает его следующим образом:

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

Он жалуется, что параметры не соответствуют какой-либо переопределение. Таким образом, есть способ иметь значения по умолчанию для параметров и наследовать от интерфейса, я не возражаю, если интерфейс должен иметь значение по умолчанию, так как он всегда будет необязательным аргументом.

ответ

56

Вы можете определить параметр как необязательное с ?:

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

о, я думал, что это был удален в пользу значения по умолчанию в одном из последних версий. Итак, я могу использовать необязательный аргумент в интерфейсе и аргумент значения по умолчанию в классе? – Grofit

+0

Вы по-прежнему можете использовать необязательные аргументы без каких-либо настроек по умолчанию. Единственным недопустимым является избыточный синтаксис 'x? = 4' - вы можете либо иметь значение'? ', Либо значение по умолчанию. –

+6

И будьте осторожны, если вы вызовете 'SomeMethod ('foo', 'bar')' 'параметр' arg3' будет 'undefined', а не' null'. – vegemite4me

Смежные вопросы