Saya mendapat kelas berikut di TypeScript:
class CallbackTest
{
public myCallback;
public doWork(): void
{
//doing some work...
this.myCallback(); //calling callback
}
}
Saya menggunakan kelas seperti ini:
var test = new CallbackTest();
test.myCallback = () => alert("done");
test.doWork();
Kode berfungsi, sehingga menampilkan kotak pesan seperti yang diharapkan.
Pertanyaan saya adalah: Apakah ada tipe apa pun yang dapat saya sediakan untuk bidang kelas saya myCallback
? Saat ini, bidang publik myCallback
adalah tipe any
seperti yang ditunjukkan di atas. Bagaimana saya bisa menentukan metode tanda tangan panggilan balik? Atau bisakah saya mengatur tipe ke beberapa tipe callback? Atau bisakah aku melakukan ini? Apakah saya harus menggunakan any
(implisit / eksplisit)?
Saya mencoba sesuatu seperti ini, tetapi tidak berhasil (kesalahan waktu kompilasi):
public myCallback: ();
// or:
public myCallback: function;
Saya tidak dapat menemukan penjelasan apa pun untuk online ini, jadi saya harap Anda dapat membantu saya.
sumber
Untuk melangkah lebih jauh, Anda bisa mendeklarasikan pointer tipe ke tanda tangan fungsi seperti:
dan gunakan seperti ini:
sumber
let callback: myCallbackType|null = null;
type MyHandler = (myArgument: string) => void
saja. (Tipe panggilan )" ; lihat jawaban TSV...args: any[]
. Contoh: ekspor antarmuka MyInterface {/ ** Fungsi panggilan balik. / callback: (... args: any []) => any, / * Parameter untuk fungsi callback. * / callbackParams: any []}Anda dapat mendeklarasikan tipe baru:
Memperbarui.
Kata
declare
kunci tidak perlu. Ini harus digunakan dalam file .d.ts atau dalam kasus serupa.sumber
var handler: (myArgument: string) => void
secara sintaksis valid (jika agak berantakan).Ini adalah contohnya - tidak menerima parameter dan tidak mengembalikan apa pun.
Jika Anda ingin menerima parameter, Anda dapat menambahkannya juga:
Dan jika Anda ingin mengembalikan nilai, Anda dapat menambahkannya juga:
sumber
exactly equivalent
.Jika Anda menginginkan fungsi generik, Anda dapat menggunakan yang berikut ini. Meskipun sepertinya tidak didokumentasikan di mana pun.
sumber
Anda dapat menggunakan yang berikut ini:
type
kata kunci, aliasing fungsi literal)Berikut adalah contoh cara menggunakannya:
sumber
Saya menemukan kesalahan yang sama ketika mencoba menambahkan panggilan balik ke pendengar acara. Anehnya, pengaturan jenis panggilan balik ke EventListener menyelesaikannya. Itu terlihat lebih elegan daripada mendefinisikan tanda tangan seluruh fungsi sebagai tipe, tapi saya tidak yakin apakah ini cara yang benar untuk melakukan ini.
sumber
Saya sedikit terlambat, tetapi, karena beberapa waktu lalu dalam TypeScript Anda dapat menentukan jenis panggilan balik dengan
Contoh penggunaan:
sumber