Saat ini saya memiliki definisi tipe sebagai:
interface Param {
title: string;
callback: any;
}
Saya butuh sesuatu seperti:
interface Param {
title: string;
callback: function;
}
tapi yang ke-2 tidak diterima.
javascript
typescript
Smrutiranjan Sahu
sumber
sumber
Function
huruf kapital F seperti yang ditunjukkan pada baris pertama dari jawaban ini, dan mengatakan paragraf kedua (menggunakan jenis() => void
atau apa pun yang cocok dengan use case) lebih disukai?Naskah dari v1.4 memiliki
type
kata kunci yang menyatakan alias jenis (analog dengan atypedef
di C / C ++). Anda dapat mendeklarasikan jenis panggilan balik Anda sebagai berikut:yang mendeklarasikan fungsi yang tidak menggunakan argumen dan tidak menghasilkan apa-apa. Fungsi yang tidak menggunakan argumen apa pun nol atau lebih dan tidak menghasilkan apa pun adalah:
Maka Anda dapat mengatakan, misalnya,
Jika Anda menginginkan fungsi yang mengambil sejumlah argumen sembarang dan mengembalikan apa pun (termasuk batal):
Anda dapat menentukan beberapa argumen wajib dan kemudian satu set argumen tambahan (katakanlah string, angka dan kemudian satu set argumen tambahan) dengan demikian:
Ini bisa berguna untuk hal-hal seperti penangan EventEmitter.
Fungsi dapat diketik sekuat yang Anda suka dalam mode ini, meskipun Anda dapat terbawa dan mengalami masalah kombinatorik jika Anda mencoba untuk memakukan semuanya dengan alias alias.
sumber
Function
dan(...args: any[]) => any
apa yang lebih disukai?...args: any[]
tidak terlalu berguna.type CallbackFunctionSomeVariadic = (arg1: string, arg2: number, ...args: any[]) => void;
apa yang saya cari, ty.Mengikuti dari jawaban Ryan, saya pikir antarmuka yang Anda cari didefinisikan sebagai berikut:
sumber
Berikut adalah contoh fungsi yang menerima panggilan balik
Jika Anda tidak peduli dengan nilai balik callback (kebanyakan orang tidak tahu bagaimana menggunakannya dengan cara yang efektif), Anda dapat menggunakan
void
Catatan, tanda tangan yang saya gunakan untuk
callback
parameter ...Saya akan mengatakan ini adalah kekurangan TypeScript karena kami diharapkan untuk memberikan nama untuk parameter panggilan balik. Dalam hal ini saya menggunakan
_
karena tidak dapat digunakan di dalamsqk
fungsi.Namun, jika Anda melakukan ini
Ini TypeScript yang valid , tetapi akan ditafsirkan sebagai ...
Yaitu, naskah akan berpikir parameter nama adalah
number
dan jenis tersirat adalahany
. Ini jelas bukan yang kami maksudkan, tetapi sayangnya, itulah cara kerja TypeScript.Jadi jangan lupa untuk memberikan nama parameter saat mengetik parameter fungsi Anda ... sepertinya bodoh.
sumber
Anda dapat menentukan jenis fungsi dalam antarmuka dengan berbagai cara,
Menggunakan sangat lurus ke depan,
sumber
Ada empat jenis fungsi abstrak, Anda dapat menggunakannya secara terpisah ketika Anda tahu fungsi Anda akan mengambil argumen (s) atau tidak, akan mengembalikan data atau tidak.
seperti ini:
Untuk hanya menggunakan satu tipe sebagai tipe fungsi apa pun, kami dapat menggabungkan semua tipe abstrak menjadi satu, seperti ini:
lalu gunakan seperti:
Dalam contoh di atas semuanya benar. Tetapi contoh penggunaan di bawah ini tidak benar dari sudut pandang sebagian besar editor kode.
Panggilan editor yang benar adalah seperti ini:
sumber
Anda dapat mendeklarasikan callback sebagai 1) fungsi properti atau 2) metode :
Ada perbedaan pengetikan yang penting sejak TS 2.6 :
Anda mendapatkan lebih kuat ("suara") ketik
--strict
atau--strictFunctionTypes
mode, ketika properti fungsi dideklarasikan. Mari kita ambil contoh:Secara teknis, metode bersifat bivarian dan berfungsi sebagai contravarian dalam argumen mereka
strictFunctionTypes
. Metode masih diperiksa lebih permisif (bahkan jika tidak suara) menjadi sedikit lebih praktis dalam kombinasi dengan tipe bawaan sepertiArray
.Ringkasan
Kode sampel taman bermain
sumber