Diberikan tanda tangan berikut:
export interface INotificationService {
error(message: string, title?: string, autoHideAfter?: number);
}
Bagaimana saya bisa memanggil fungsi error()
tidak menentukan title
parameter, tetapi pengaturan autoHideAfter
mengatakan 1000
?
typescript
g.pickardou
sumber
sumber
?
ditambahkan dalam definisi fungsi , tetapi pertanyaannya adalah tentang sebenarnya memanggil fungsi.undefined
untuk mendapatkan perilaku yang sama seperti meninggalkan argumen sepenuhnya. Hanya "apa pun yang tidak benar" tidak akan berfungsi, karena TypeScript sebenarnya membandingkanvoid 0
yang merupakan cara penulisan yang lebih amanundefined
. )Sayangnya tidak ada yang seperti ini di TypeScript (lebih detail di sini: https://github.com/Microsoft/TypeScript/issues/467 )
Tetapi untuk menyiasatinya, Anda dapat mengubah params menjadi antarmuka:
sumber
Anda dapat menggunakan variabel opsional dengan
?
atau jika Anda memiliki beberapa variabel opsional...
, misalnya:Di atas:
name
diperlukancountry
diperlukan dan memiliki nilai defaultaddress
adalah opsionalhobbies
adalah array params opsionalsumber
Pendekatan lain adalah:
Jadi ketika Anda ingin menghilangkan parameter judul, cukup kirim data seperti itu:
Saya lebih suka opsi ini karena memungkinkan saya untuk menambahkan lebih banyak parameter tanpa harus mengirim yang lain.
sumber
title
?Ini hampir sama dengan jawaban @Brocco, tetapi dengan sedikit twist: hanya memberikan parameter opsional pada objek. (Dan juga membuat objek params opsional).
Itu akhirnya menjadi seperti kwarg ** Python, tetapi tidak persis.
sumber
Anda dapat menentukan beberapa tanda tangan metode pada antarmuka kemudian memiliki beberapa metode kelebihan beban pada metode kelas:
Sekarang semua ini akan berhasil:
... dan
error
metodeINotificationService
akan memiliki opsi berikut:Tempat bermain
sumber
Anda bisa membuat metode pembantu yang menerima basis parameter satu objek berdasarkan argumen kesalahan
sumber
Anda dapat mencoba mengatur judul menjadi nol.
Ini berhasil untuk saya.
sumber
Anda dapat melakukan ini tanpa antarmuka.
gunakan
?
operator sebagai parameter opsional.sumber
message
danautoHideAfter