2013-09-05 96 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