TypeScript 1.5 sekarang memiliki dekorator .
Bisakah seseorang memberikan contoh sederhana yang menunjukkan cara yang tepat untuk menerapkan dekorator dan menjelaskan apa arti argumen dalam tanda tangan dekorator yang valid?
declare type ClassDecorator = <TFunction extends Function>(target: TFunction) => TFunction | void;
declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;
declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
declare type ParameterDecorator = (target: Function, propertyKey: string | symbol, parameterIndex: number) => void;
Selain itu, adakah pertimbangan praktik terbaik yang harus diingat saat menerapkan dekorator?
typescript
decorator
David Sherret
sumber
sumber
@Injectable
ke dekorator, lihatJawaban:
Saya akhirnya bermain-main dengan dekorator dan memutuskan untuk mendokumentasikan apa yang saya temukan bagi siapa saja yang ingin memanfaatkan ini sebelum dokumentasi apa pun keluar. Silakan mengedit ini jika Anda melihat kesalahan.
Poin Umum
Metode / Dekorator Pengakses Formal
Parameter implementasi:
target
: Prototipe kelas (Object
).propertyKey
: Nama metode (string
|symbol
).descriptor
: ATypedPropertyDescriptor
- Jika Anda tidak terbiasa dengan kunci deskriptor, saya akan merekomendasikan membacanya di dokumentasi ini padaObject.defineProperty
(ini adalah parameter ketiga).Contoh - Tanpa Argumen
Menggunakan:
Penerapan:
Memasukkan:
Keluaran:
Catatan:
this
tidak akan menjadi instance jika Anda melakukannya.@enumerable(false)
dan@log
pada saat yang sama (Contoh: Buruk vs Baik )TypedPropertyDescriptor
dapat digunakan untuk membatasi tanda tangan metode apa ( Contoh Metode ) atau tanda tangan accessor ( Contoh Accessor ) dekorator dapat memakai.Contoh - Dengan Argumen (Pabrik Penghias)
Saat menggunakan argumen, Anda harus mendeklarasikan fungsi dengan parameter dekorator lalu mengembalikan fungsi dengan tanda tangan contoh tanpa argumen.
Dekorator Metode Statis
Mirip dengan dekorator metode dengan beberapa perbedaan:
target
parameter adalah fungsi konstruktor sendiri dan tidak prototipe.Dekorator Kelas
Parameter implementasi:
target
: Kelas dekorator dideklarasikan pada (TFunction extends Function
).Contoh penggunaan : Menggunakan api metadata untuk menyimpan informasi di kelas.
Dekorator Properti
Parameter implementasi:
target
: Prototipe kelas (Object
).propertyKey
: Nama properti (string
|symbol
).Contoh penggunaan : Membuat
@serialize("serializedName")
dekorator dan menambahkan nama properti ke daftar properti untuk diserialisasi.Dekorator Parameter
Parameter implementasi:
target
: Prototipe kelas (Function
- sepertinyaFunction
tidak berfungsi lagi. Anda harus menggunakanany
atau diObject
sini sekarang untuk menggunakan dekorator dalam kelas apa pun. Atau tentukan jenis kelas yang ingin Anda batasi)propertyKey
: Nama metode (string
|symbol
).parameterIndex
: Indeks parameter dalam daftar parameter fungsi (number
).Contoh sederhana
Contoh terperinci
sumber
target
atau apaprototype of the class
dankey
mengacu pada, bisakah seseorang menjelaskan hal itu?Satu hal penting yang tidak saya lihat dalam jawaban lain:
Pabrik dekorator
Periksa bab Dekorator buku pegangan TypeScript .
sumber
Anda bisa menerapkan sesuatu yang mencatat setiap panggilan ke konsol:
sumber