Câu hỏi Trình sửa đổi truy cập nào được ngụ ý khi không được chỉ định?


Đối với tất cả các khái niệm khác nhau có hỗ trợ các công cụ sửa đổi truy cập, chẳng hạn như các trường, thuộc tính, phương thức và các lớp, truy cập các công cụ sửa đổi được ngụ ý nếu không được chỉ định?


76
2017-12-20 05:33


gốc


Này sam. Bạn có thể đánh dấu là đã trả lời để nó không nằm trong hàng đợi chưa được trả lời - basarat
@ barat, đã lâu rồi tôi không sử dụng TypeScript, nên thật khó để nhớ nó hoạt động như thế nào trong những ngày này! Theo như tôi nhớ, câu trả lời của bạn có vẻ hợp lý, nhưng tôi không cảm thấy nó đủ thẩm quyền để tôi đánh dấu nó là chính xác. Câu trả lời của bạn có dựa trên trải nghiệm của bạn với ngôn ngữ hay không hoặc từ thông tin trong thông số kỹ thuật? - Sam
dựa trên đặc điểm kỹ thuật github.com/Microsoft/TypeScript/blob/master/doc/spec.md - basarat
@ basarat, cảm ơn! Các spec có vẻ là nói giống như câu trả lời của bạn, vì vậy tôi đã chỉ chấp nhận câu trả lời. - Sam


Các câu trả lời:


Mọi thứ trong một class Là public nếu không được chỉ định. Mọi thứ trong một module là riêng tư trừ khi export từ khóa được sử dụng.


107
2017-12-20 06:20



Đối với những người chơi với một bộ khởi động. Một số người trong số họ tàu với tslint và nó có thể nhận được rất khó hiểu. Khi bạn thấy thông báo này default access modifier on member/method not allowed  Kiểm tra tslint.json để cho phép công cụ sửa đổi truy cập mặc định hoặc ngụ ý. - visheshd
Có thể sử dụng bước tiền chuyển đổi để tự động gán private? - Qwerty


Tôi không đồng ý rằng

Mọi thứ trong một lớp là công khai nếu không được chỉ định.

Mọi thứ đều công khai, ngay cả khi cá nhân được sử dụng. Chỉ cần nhìn vào mã được chuyển đổi. Các phương thức được chú thích riêng sẽ có sẵn công khai. Chỉ transpiling sẽ ném lỗi. Cả công khai và riêng tư sẽ được chuyển thành <Object>.prototype.funcName


-2
2018-05-25 11:52



Vâng, đây là một điểm tốt. Tuy nhiên, câu hỏi của tôi là which access modifiers are implied when not specified thay vì can my code be accessed when an access modifier is not specified. Các công cụ sửa đổi truy cập là một khái niệm TypeScript chứ không phải là một khái niệm JavaScript. Vì vậy, tôi nghĩ rằng câu trả lời của @ basarat giải quyết những gì tôi có nghĩa là trong câu hỏi và dường như là chính xác trong bối cảnh của câu hỏi. Có lẽ có một số phòng để phân biệt các từ ngữ trong câu hỏi và câu trả lời. - Sam
Đó chỉ là cách TS hoạt động, nó sẽ biên dịch mã của bạn cho dù đó là "đúng" từ quan điểm TS, điều này ngụ ý mọi thứ trong TS mà không có ngoại lệ cho lớp, nhưng điểm chính là nếu bạn tôn trọng cảnh báo TS - bạn sẽ không truy cập các thuộc tính được đánh dấu là riêng tư. - Andrew Bogdanov
Tôi không thể nghĩ ra bất kỳ ngôn ngữ nào mà ở đó thực sự là riêng tư. Trong C # bạn có thể dễ dàng nhận được ở bất kỳ lĩnh vực tư nhân thông qua sự phản ánh. Trong các ngôn ngữ cấp thấp hơn như C hoặc C ++, bạn có thể nhận được ở các trường riêng chỉ bằng cách di chuyển con trỏ xung quanh. Thiếu các biện pháp bảo vệ ở cấp hệ điều hành, như DEP và bộ nhớ được mã hóa, các công cụ sửa đổi truy cập chỉ hỗ trợ trình biên dịch để giúp bạn viết mã tốt hơn. ...Đúng? - pbarranis