2013-09-05 66 views
28

我遇到的情况,我有一个具有像这样一个方法的接口:打字稿 - 在类的默认参数与接口

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

而且像这样一类:

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

现在的问题是我似乎无法告诉界面,第三个选项应该是可选的或有一个默认值,好像我试图告诉界面有一个默认值我得到的错误:

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