2014-06-19 3 views
2

형식 매개 변수의 정적 메서드를 호출 할 수 있습니까? 예를 들어 다음 코드가 있습니다.TypeScript에서 형식 매개 변수의 정적 메서드를 호출하는 방법

class BaseA1 { 
    public static getString(): string { 
    return "A1"; 
    } 
} 

class A<A1 extends BaseA1> { 
    constructor() { 
    var name = A1.getString(); // <== error [the property getString does not exist ...] 
    } 
} 

정적 메서드를 올바르게 호출하는 방법은 무엇입니까? 가능한 최선의 대안이 무엇이 아닌가? 고마워, 친절하게.

+0

이것은 균형이 잘 잡혀 있지만, 이것은 TypeScript의 클래스와 관련이 있으며 JavaScript에서는 전혀 사용되지 않기 때문에'javascript' 태그를 제거했습니다. (대부분의 많은 TypeScript 질문에는 적절하게'javascript' 태그가 있지만 질문이 TypeScript 언어 기능에 관한 것이면 적절하지 않습니다. –

+0

좋은 질문, btw 및 질문이 있습니다. –

답변

2

정적 메서드는 인스턴스가 아닌 클래스 형식에 속합니다. 특히 A1이 정의 된 경우 자체는 getString이지만 재정의 된 메서드가 아니라 그림자 처리 된 메서드입니다.

그래서 원하는 기본 시나리오는 기본 유형에서 메소드를 섀도 잉하는 유형에 의존하려는 경우입니다. 그러나 이것은 매우 악취가 나는 코드입니다 (다른 말로하면하지 마십시오).

BaseA1.getString()을 호출하거나 서브 클래스에서 재정의 할 방법이 필요한 경우 적절한 인스턴스 메소드가되도록하십시오. 귀하의 예제가 하위 클래스의 이름을 반환한다는 것을 알고, 나는 당신이 뭔가 비린내를 성취하려고 노력하는 경향이 있으며, 어떻게하면 문제를 해결할 수 있는지에 대한 질문을하기보다는 해결하고 싶은 근본적인 문제에 대해 다른 질문을 할 것을 제안합니다. 현재의 디자인 작업.

여기에 대한 설명은 here입니다. Typescript보다는 Java에 관한 것이지만 아이디어는 같습니다.

+0

tldr; 정적은 알려진 유형 인 BaseA1에 속하므로 A1에서 전화하는 이유는 무엇입니까? – x0n

+0

@ x0n : 사용되는 구체적인 유형에 의해 그림자가 생기는 경우, '생성자'는 인스턴스마다 다르며 구체적인 유형이 알려져 있기 때문입니다. 질문은 완벽한 의미를 지니 며,이를 다루기위한 논쟁이 있습니다 (다시 말하면, 인스턴스 특정 코드에서만). TypeScript는 분명히 Java도 아니고 (Java는 Java를 컴파일하지만 BaseA1의 버전을 호출합니다.)하지만 높은 수준에서는 TypeScript가 동적이기 때문에 Typescript가 Java보다 더 합리적 일 수 있습니다. 양자 모두). –

+0

그건 coinsidence (하위 클래스의 이름에 대해 이야기)입니다. 반환 문자열은 임의의 내용이었을 수 있습니다. 아마도 MVC 패턴의 모델 레이어를 작성하고 있으며, 각 클래스는 엔티티를 나타냅니다. 모든 엔터티의 루트 부모 클래스에는 데이터베이스의 테이블 이름을 반환하는 정적 메서드가 있습니다. 이 메소드는 우선 순위에 오버라이드 (override) 할 필요가 있습니다. 그렇습니다. –

관련 문제