2012-10-11 17 views
26

Tôi muốn xác định giao diện có thuộc tính chỉ đọc. Ví dụ;Có thể sử dụng getters/setters trong giao diện TypeScript không?

interface foo { 
    get bar():bool; 
} 

Tuy nhiên, điều này sẽ gây ra lỗi cú pháp, "mong đợi"; "trên thanh. Tôi đã thiết lập VisualStudio của tôi để sử dụng mục tiêu ES5, vì vậy getters được hỗ trợ. Đây có phải là giới hạn giao diện không? Có thể thay đổi này trong tương lai; đó là một điều rất hay để có thể làm được.

+2

Xem http: // stackoverflow .com/questions/12838248/is-it-possible-to-use-getters-setters-in-interface-definition –

+2

Vâng, đây là giới hạn của giao diện. Xem thêm [câu hỏi này] [1]. [1]: http://stackoverflow.com/questions/12838248/is-it-possible-to-use-getters-setters-in-interface-definition – Valentin

Trả lời

16

Vâng, đây là giới hạn của giao diện. Việc truy cập vào tài sản có được thực hiện với getter hay không là chi tiết triển khai và do đó không nên là một phần của giao diện công khai. Xem thêm this question.

Nếu bạn cần một thuộc tính chỉ đọc quy định trong một giao diện, bạn có thể thêm một phương thức getter:

interface foo { 
    getAttribute() : string; 
} 
+8

Thật không may, nó không phải là một chi tiết thực hiện mà là chỉ đọc. Tôi ước gì tôi có thể diễn tả điều đó trong phần Typecript. – Ezward

+0

Tôi hiểu. Sau đó, tôi nghĩ cách duy nhất của bạn là chỉ định phương thức getter. Tôi đã cập nhật câu trả lời của mình cho phù hợp. – Valentin

+2

Có lẽ điều này sẽ trở thành có thể trong TypeScript 2.0: https://github.com/Microsoft/TypeScript/pull/6532 –

24

tính Getter chỉ được giới thiệu trong Typescript 2.0:

interface foo { 
    readonly bar: boolean; 
} 
+1

Nếu tôi không nhầm, điều này vẫn tuyên bố 'bar' là một thuộc tính, không phải là getter. –

+1

@AlexanderAbakumov chỉ đọc không chỉ định rằng nó phải là tài sản. Vì các thuộc tính được tham chiếu theo cùng một cách như getters, lớp thực hiện giao diện này là miễn phí để sử dụng một thuộc tính hoặc một getter. – nikeee

+0

@ nikeee: Có, nhưng OP đã hỏi liệu chúng tôi có thể sử dụng getters/setters trong giao diện chứ không phải thuộc tính. –

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