일반적으로 함수 오버로딩이란 무엇입니까?
함수 오버로딩 또는 메서드 오버로딩은 구현 이 다른 동일한 이름 의 여러 함수 를 생성 하는 기능 입니다 ( 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
함수 구현이 컴파일러에 의해 시행되는 모든 과부하 서명과 호환되므로 매우 다른 과부하가 가능합니다.
더 많은 정보 :