2012-11-04 2 views
1

나는이 인터페이스가 ..함수 인터페이스 및 클래스에서 오버로딩 - 방법?

interface IPoint { 
    getDist(): string; 
    getDist(x: number): any; 
} 

을하고 나는 그것을 구현하는 클래스가 필요하지만이 클래스의 getDist() 메소드 을 구현 할 수있는 권리 구문을 얻을 수

class Point implements IPoint { 
    // Constructor 
    constructor (public x: number, public y: number) { } 

    pointMethod() { } 

    getDist() { 
     Math.sqrt(this.x * this.x + this.y * this.y); 
    } 
    // Static member 
    static origin = new Point(0, 0); 
} 

는 말한다 : 유형 '포인트'의 재산 유형 'getDist'

클래스 '포인트'를 인터페이스 'IPoint'을 선언하지만, 구현하지 않습니다 및 'IPoint'는 호환되지 않습니다. '() => void'및 '{() : string; (x : number) : 모두; } '은 (는) 호환되지 않습니다.

이 작업을 수행하는 올바른 방법은 무엇입니까?

감사

답변

3

당신은 오버로드로 장식해야합니다 당신은 두 번째 선언을 쓸 필요가

getDist(): string; 
getDist(x: number): any; 
getDist(x?: number): any { 
    // your code 
} 
+0

. 그것도없이 작동 –

+0

@ S.RaviKiran 오버로드 된 함수에서 구현을 호출 할 수 없으므로 두 가지 오버로드 선언이 필요합니다. TypeScript 놀이터에서 이것을 시험해 볼 수 있습니다. http://www.typescriptlang.org/Playground/ – Fenton

+0

시도해 보니 –

2

This answer는 타이프에서 오버로드 메소드를 구현하는 방법에 대해 설명하고, 꽤 아니다 :

interface IPoint { 
    getDist(): string; 
    getDist(x: number): any; 
} 

class Point implements IPoint { 
    // Constructor 
    constructor (public x: number, public y: number) { } 

    pointMethod() { } 

    getDist(x?: number) { 
     if (x && typeof x == "number") { 
      return 'foo'; 
     } else { 
      return 'bar'; 
     } 
    } 
} 

N.B. 인터페이스에서 선언 된 반환 유형의 특정 조합을 사용하면 getDist에서 문자열을 반환 할 수 있습니다. 당신이 클래스의 함수를 선언 할 때