Saya menyadari posting ini sudah tua, tetapi ada pendekatan yang lebih kompak yang sedikit berbeda dari yang diminta, tetapi mungkin merupakan alternatif yang sangat membantu. Anda pada dasarnya dapat mendeklarasikan fungsi in-line saat memanggil metode ( Foo
's save()
dalam kasus ini). Akan terlihat seperti ini:
class Foo {
save(callback: (n: number) => any) : void {
callback(42)
}
multipleCallbacks(firstCallback: (s: string) => void, secondCallback: (b: boolean) => boolean): void {
firstCallback("hello world")
let result: boolean = secondCallback(true)
console.log("Resulting boolean: " + result)
}
}
var foo = new Foo()
// Single callback example.
// Just like with @RyanCavanaugh's approach, ensure the parameter(s) and return
// types match the declared types above in the `save()` method definition.
foo.save((newNumber: number) => {
console.log("Some number: " + newNumber)
// This is optional, since "any" is the declared return type.
return newNumber
})
// Multiple callbacks example.
// Each call is on a separate line for clarity.
// Note that `firstCallback()` has a void return type, while the second is boolean.
foo.multipleCallbacks(
(s: string) => {
console.log("Some string: " + s)
},
(b: boolean) => {
console.log("Some boolean: " + b)
let result = b && false
return result
}
)
The multipleCallback()
Pendekatan ini sangat berguna untuk hal-hal seperti panggilan jaringan yang mungkin berhasil atau gagal. Sekali lagi dengan asumsi contoh panggilan jaringan, kapanmultipleCallbacks()
dipanggil, perilaku untuk sukses dan gagal dapat didefinisikan di satu tempat, yang cocok untuk kejelasan yang lebih besar bagi pembaca kode masa depan.
Secara umum, dalam pengalaman saya, pendekatan ini cocok untuk menjadi lebih ringkas, kurang berantakan, dan lebih jelas secara keseluruhan.
Semoga beruntung semuanya!
(n: number) => any
berarti ada tanda tangan fungsi?