ฟังก์ชั่นการโหลดเกินพิกัดทั่วไปคืออะไร?
การโอเวอร์โหลดฟังก์ชั่นหรือวิธีการโอเวอร์โหลดเป็นความสามารถในการสร้างหลายฟังก์ชั่นในชื่อเดียวกันกับการใช้งานที่แตกต่างกัน ( Wikipedia )
ฟังก์ชันโอเวอร์โหลดใน JS คืออะไร
คุณลักษณะนี้เป็นไปไม่ได้ใน JS - ฟังก์ชั่นที่กำหนดไว้ล่าสุดถูกนำมาใช้ในกรณีที่มีการประกาศหลายรายการ:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... และใน TS?
โอเวอร์โหลดเป็นโครงสร้างเวลารวบรวมโดยไม่มีผลกระทบกับรันไทม์ 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
ข้อผิดพลาดในการใช้งานที่ซ้ำกันจะถูกเรียกใช้หากคุณใช้รหัสด้านบน (ปลอดภัยกว่า JS) TS เลือกโอเวอร์โหลดแรกที่เหมาะสมตามลำดับจากบนลงล่างดังนั้นโอเวอร์โหลดจึงถูกเรียงลำดับจากเฉพาะส่วนใหญ่ไปจนถึงกว้างที่สุด
วิธีการบรรทุกเกินพิกัดใน TS: ตัวอย่างที่ซับซ้อนมากขึ้น
ประเภทวิธีการเรียนมากเกินไปสามารถใช้ในลักษณะที่คล้ายกับการทำงานมากเกินไป:
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
โอเวอร์โหลดที่แตกต่างกันอย่างมากมายเป็นไปได้เนื่องจากการใช้งานฟังก์ชั่นเข้ากันได้กับลายเซ็นเกินพิกัด - บังคับใช้โดยคอมไพเลอร์
ข่าวสารเพิ่มเติม: