Chức năng quá tải nói chung là gì?
Tái định nghĩa hàm hoặc phương pháp quá tải là khả năng tạo ra nhiều chức năng của cùng tên với hiện thực khác nhau ( Wikipedia )
Chức năng nạp chồng trong JS là gì?
Tính năng này không khả dụng trong JS - hàm được xác định cuối cùng được thực hiện trong trường hợp có nhiều khai báo:
function foo(a1, a2) { return `${a1}, ${a2}` }
function foo(a1) { return `${a1}` } // replaces above `foo` declaration
foo(42, "foo") // "42"
... và trong TS?
Quá tải là một cấu trúc thời gian biên dịch mà không ảnh hưởng đến thời gian chạy 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
Một lỗi thực thi trùng lặp được kích hoạt, nếu bạn sử dụng mã ở trên (an toàn hơn so với JS). TS chọn quá tải phù hợp đầu tiên theo thứ tự từ trên xuống, do đó, quá tải được sắp xếp từ cụ thể nhất đến rộng nhất.
Phương thức nạp chồng trong TS: một ví dụ phức tạp hơn
Các kiểu phương thức lớp quá tải có thể được sử dụng theo cách tương tự như nạp chồng hàm:
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
Quá tải rất khác nhau là có thể, vì việc thực hiện chức năng tương thích với tất cả các chữ ký quá tải - được thực thi bởi trình biên dịch.
Thêm thông tin: