Apakah fungsi kelebihan beban secara umum?
Fungsi overloading atau metode overloading adalah kemampuan untuk membuat beberapa fungsi dari nama yang sama dengan implementasi yang berbeda ( Wikipedia )
Apakah fungsi kelebihan beban di JS?
Fitur ini tidak dimungkinkan dalam JS - fungsi yang didefinisikan terakhir diambil jika ada beberapa deklarasi:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... dan di TS?
Overload adalah konstruk waktu kompilasi tanpa dampak pada runtime JS:
function foo(s: string): string // overload #1 of foo
function foo(s: string, n: number): number // overload #2 of foo
function foo(s: string, n?: number): string | number {/* ... */} // foo implementation
Kesalahan implementasi duplikat dipicu, jika Anda menggunakan kode di atas (lebih aman daripada JS). TS memilih overload fitting pertama dalam urutan top-down, sehingga overload diurutkan dari yang paling spesifik ke yang paling luas.
Metode overloading di TS: contoh yang lebih kompleks
Tipe metode kelas kelebihan beban dapat digunakan dengan cara yang mirip dengan fungsi kelebihan beban:
class LayerFactory {
createFeatureLayer(a1: string, a2: number): string
createFeatureLayer(a1: number, a2: boolean, a3: string): number
createFeatureLayer(a1: string | number, a2: number | boolean, a3?: string)
: number | string { /*... your implementation*/ }
}
const fact = new LayerFactory()
fact.createFeatureLayer("foo", 42) // string
fact.createFeatureLayer(3, true, "bar") // number
Overload yang sangat berbeda dimungkinkan, karena implementasi fungsi kompatibel untuk semua tanda tangan overload - diberlakukan oleh kompiler.
Lebih banyak info: