2013-09-05 34 views
28

Tôi có một kịch bản mà tôi có một giao diện trong đó có một phương pháp như vậy:nguyên cảo - Mặc định các thông số trên lớp với giao diện

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

Và một lớp học như vậy:

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

Bây giờ vấn đề là dường như tôi không thể nói giao diện là tùy chọn thứ 3 phải là tùy chọn hoặc có giá trị mặc định, như thể tôi cố gắng nói với giao diện có giá trị mặc định tôi gặp lỗi:

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

Nếu tôi bỏ mặc định từ giao diện và gọi nó như vậy:

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

Nó phàn nàn rằng các tham số không phù hợp với bất kỳ ghi đè. Vì vậy, có một cách để có thể có giá trị mặc định cho các thông số và kế thừa từ một giao diện, tôi không nhớ nếu giao diện đã có giá trị như mặc định quá vì nó luôn luôn sẽ là một đối số tùy chọn.

Trả lời

56

Bạn có thể xác định các tham số là tùy chọn với ?:

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

oh Tôi nghĩ điều này đã được gỡ bỏ có lợi cho giá trị mặc định trong một trong những phiên bản gần đây. Vì vậy, tôi có thể sử dụng đối số tùy chọn trong giao diện và đối số giá trị mặc định trong lớp? – Grofit

+0

Bạn vẫn có thể sử dụng các đối số tùy chọn không có giá trị mặc định ở bất kỳ đâu. Điều không được phép duy nhất là cú pháp dự phòng 'x? = 4' - bạn có thể có'? 'Hoặc giá trị mặc định. –

+6

Và hãy cẩn thận nếu bạn gọi 'SomeMethod ('foo', 'bar')' tham số 'arg3' sẽ là' undefined', và không phải 'null'. – vegemite4me

Các vấn đề liên quan