Trình trang trí thuộc tính python với các đối số
Với việc giới thiệu Lớp trong TypeScript và ES6, hiện đã tồn tại một số tình huống nhất định yêu cầu các tính năng bổ sung để hỗ trợ chú thích hoặc sửa đổi lớp và thành viên lớp. Trình trang trí cung cấp một cách để thêm cả chú thích và cú pháp lập trình meta cho các khai báo và thành viên lớp. Trang trí là một đề xuất giai đoạn 2 cho JavaScript và có sẵn như một tính năng thử nghiệm của TypeScript Show
Để bật hỗ trợ thử nghiệm cho trình trang trí, bạn phải bật tùy chọn trình biên dịch 4 trên dòng lệnh hoặc trong 5 của bạn Dòng lệnh
tsconfig. json
người trang tríTrình trang trí là một loại khai báo đặc biệt có thể được đính kèm với khai báo lớp, phương thức, trình truy cập, thuộc tính hoặc tham số. Người trang trí sử dụng biểu mẫu 6, trong đó 7 phải đánh giá một hàm sẽ được gọi trong thời gian chạy với thông tin về khai báo được trang trí Ví dụ, với decorator 8, chúng ta có thể viết hàm 9 như sau
nhà máy trang tríNếu chúng ta muốn tùy chỉnh cách một trình trang trí được áp dụng cho một khai báo, chúng ta có thể viết một nhà máy trang trí. Nhà máy trang trí chỉ đơn giản là một hàm trả về biểu thức sẽ được gọi bởi trình trang trí khi chạy Chúng ta có thể viết một nhà máy trang trí theo cách sau
Thành phần trang tríNhiều trình trang trí có thể được áp dụng cho một khai báo, ví dụ như trên một dòng 0 Trên nhiều dòng 1 Khi nhiều bộ trang trí áp dụng cho một khai báo, việc đánh giá chúng tương tự như thành phần hàm trong toán học. Trong mô hình này, khi lập các hàm f và g, hợp số thu được (f ∘ g)(x) tương đương với f(g(x)) Như vậy, các bước sau đây được thực hiện khi đánh giá nhiều trình trang trí trên một khai báo trong TypeScript
Nếu chúng ta sử dụng các nhà máy trang trí, chúng ta có thể quan sát thứ tự đánh giá này với ví dụ sau 2 Cái nào sẽ in đầu ra này ra bàn điều khiển 3 Đánh giá trang tríCó một thứ tự được xác định rõ ràng về cách áp dụng các trình trang trí cho các khai báo khác nhau bên trong một lớp.
Trang trí lớp họcTrình trang trí lớp được khai báo ngay trước khi khai báo lớp. Trình trang trí lớp được áp dụng cho hàm tạo của lớp và có thể được sử dụng để quan sát, sửa đổi hoặc thay thế một định nghĩa lớp. Không thể sử dụng trình trang trí lớp trong tệp khai báo hoặc trong bất kỳ ngữ cảnh xung quanh nào khác (chẳng hạn như trên lớp 0) Biểu thức cho trình trang trí lớp sẽ được gọi là một hàm trong thời gian chạy, với hàm tạo của lớp được trang trí làm đối số duy nhất của nó Nếu trình trang trí lớp trả về một giá trị, nó sẽ thay thế khai báo lớp bằng hàm tạo được cung cấp
Sau đây là một ví dụ về trang trí lớp ( 8) được áp dụng cho lớp 2 7 Chúng ta có thể định nghĩa trình trang trí 8 bằng cách sử dụng khai báo hàm sau 9 Khi 8 được thực thi, nó sẽ niêm phong cả hàm tạo và nguyên mẫu của nó, và do đó sẽ ngăn chặn bất kỳ chức năng nào khác được thêm vào hoặc xóa khỏi lớp này trong thời gian chạy bằng cách truy cập 5 hoặc bằng cách xác định các thuộc tính trên chính 2 (lưu ý rằng các lớp ES2015 thực sự . Trình trang trí này không ngăn các lớp phân lớp 2 Tiếp theo, chúng ta có một ví dụ về cách ghi đè hàm tạo để đặt giá trị mặc định mới 0 phương pháp trang tríTrình trang trí phương thức được khai báo ngay trước khi khai báo phương thức. Trình trang trí được áp dụng cho Trình mô tả thuộc tính cho phương thức và có thể được sử dụng để quan sát, sửa đổi hoặc thay thế định nghĩa phương thức. Không thể sử dụng trình trang trí phương thức trong tệp khai báo, khi quá tải hoặc trong bất kỳ ngữ cảnh xung quanh nào khác (chẳng hạn như trong lớp 0) Biểu thức cho trình trang trí phương thức sẽ được gọi là một hàm trong thời gian chạy, với ba đối số sau
Nếu trình trang trí phương thức trả về một giá trị, nó sẽ được sử dụng làm Mô tả thuộc tính cho phương thức
Sau đây là một ví dụ về một trình trang trí phương thức ( 02) được áp dụng cho một phương thức trên lớp 03 1 Chúng ta có thể định nghĩa trình trang trí 02 bằng cách sử dụng khai báo hàm sau 2 Trang trí 05 ở đây là một nhà máy trang trí. Khi trình trang trí 05 được gọi, nó sẽ sửa đổi thuộc tính 07 của trình mô tả thuộc tính Phụ kiện trang tríMột Accessor Decorator được khai báo ngay trước một khai báo accessor. Trình trang trí bộ truy cập được áp dụng cho Bộ mô tả thuộc tính cho bộ truy cập và có thể được sử dụng để quan sát, sửa đổi hoặc thay thế các định nghĩa của bộ truy cập. Không thể sử dụng trình trang trí trình truy cập trong tệp khai báo hoặc trong bất kỳ ngữ cảnh xung quanh nào khác (chẳng hạn như trong lớp 0)
Biểu thức cho trình trang trí trình truy cập sẽ được gọi là một hàm trong thời gian chạy, với ba đối số sau
Nếu trình trang trí trình truy cập trả về một giá trị, nó sẽ được sử dụng làm Trình mô tả thuộc tính cho thành viên
Sau đây là một ví dụ về một bộ trang trí truy cập ( 16) được áp dụng cho một thành viên của lớp 17 3 Chúng ta có thể định nghĩa trình trang trí 16 bằng cách sử dụng khai báo hàm sau 4 trang trí tài sảnTrình trang trí thuộc tính được khai báo ngay trước khi khai báo thuộc tính. Không thể sử dụng trình trang trí thuộc tính trong tệp khai báo hoặc trong bất kỳ ngữ cảnh xung quanh nào khác (chẳng hạn như trong lớp 0) Biểu thức cho trình trang trí thuộc tính sẽ được gọi là một hàm trong thời gian chạy, với hai đối số sau
Chúng tôi có thể sử dụng thông tin này để ghi lại siêu dữ liệu về thuộc tính, như trong ví dụ sau 5 Sau đó, chúng ta có thể định nghĩa hàm trang trí 20 và hàm 21 bằng cách sử dụng các khai báo hàm sau 6 Trang trí 22 ở đây là một nhà máy trang trí. Khi 22 được gọi, nó sẽ thêm một mục nhập siêu dữ liệu cho thuộc tính bằng cách sử dụng hàm 24 từ thư viện 25. Khi 21 được gọi, nó sẽ đọc giá trị siêu dữ liệu cho định dạng
Trình trang trí thông sốTrình trang trí tham số được khai báo ngay trước khi khai báo tham số. Trình trang trí tham số được áp dụng cho hàm cho hàm tạo lớp hoặc khai báo phương thức. Không thể sử dụng trình trang trí tham số trong tệp khai báo, quá tải hoặc trong bất kỳ ngữ cảnh xung quanh nào khác (chẳng hạn như trong lớp 0) Biểu thức cho trình trang trí tham số sẽ được gọi là một hàm trong thời gian chạy, với ba đối số sau
Giá trị trả về của trình trang trí tham số bị bỏ qua Sau đây là một ví dụ về trình trang trí tham số ( 30) được áp dụng cho tham số của một thành viên của lớp 2 7 Sau đó, chúng ta có thể xác định các trình trang trí 30 và 33 bằng cách sử dụng các khai báo hàm sau 8 Trình trang trí 30 thêm mục nhập siêu dữ liệu đánh dấu tham số theo yêu cầu. Trình trang trí 33 sau đó bao bọc phương thức 36 hiện có trong một hàm xác thực các đối số trước khi gọi phương thức ban đầu
MetadataMột số ví dụ sử dụng thư viện 25 bổ sung một polyfill cho API siêu dữ liệu thử nghiệm. Thư viện này chưa phải là một phần của tiêu chuẩn ECMAScript (JavaScript). Tuy nhiên, khi các công cụ trang trí được chính thức áp dụng như một phần của tiêu chuẩn ECMAScript, các tiện ích mở rộng này sẽ được đề xuất áp dụng Bạn có thể cài đặt thư viện này qua npm 9 TypeScript bao gồm hỗ trợ thử nghiệm để phát ra một số loại siêu dữ liệu nhất định cho các khai báo có trang trí. Để kích hoạt hỗ trợ thử nghiệm này, bạn phải đặt tùy chọn trình biên dịch 70 trên dòng lệnh hoặc trong 5 của bạn Dòng lệnh 0 tsconfig. json 1 Khi được bật, miễn là thư viện 25 đã được nhập, thông tin loại thời gian thiết kế bổ sung sẽ được hiển thị khi chạy Chúng ta có thể thấy điều này trong hành động trong ví dụ sau 2 Trình biên dịch TypeScript sẽ chèn thông tin kiểu thời gian thiết kế bằng cách sử dụng trình trang trí 73. Bạn có thể coi nó tương đương với TypeScript sau 3
|