2017-03-15 10 views
5

하위 클래스에서 사용할 수 있어야하지만 변경할 수없는 수퍼 클래스에 메서드를 구현하려고합니다. 이것을 고려하십시오 :TypeScript에서 "sealed"또는 "final"과 동일한 항목이 있습니까?

export abstract class BaseClass { 
    universalBehavior(): void { 
     doStuff(); // Do some universal stuff the same way in all sub classes 
     specializedBehavior(); // Delegate specialized stuff to sub classes 
    } 

    protected abstract specializedBehavior(): void; 
} 

내 의도는 BaseClass로의 하위 클래스는 universalBehavior()의 구현을 생략 할 수없는 것뿐만 아니라 있다는 것이지만, 심지어 구현을 제공 할 수 없습니다. 이것이 (아직) TypeScript에서 가능하지 않습니까? Intellisense는 하위 클래스에서 구현을 생략 할 때 불평합니다. 내가 어떤 서브 클래스는 지금까지 super.universalBehavior()를 호출 이외로 universalBehavior()를 구현 없는지 확인해야하기 때문에 분명히이 문제가

export class SubClass extends BaseClass { 
    universalBehavior(): void { 
     super.universalBehavior(); 
    } 

    specializedBehavior(): void { 
     // sub class' implementation 
    } 
} 

: 내가 할 것으로 보인다 수있는 최선은 이것이다.

+1

다음은 TypeScript에 'final'을 추가하는 방법에 대한 설명입니다. https://github.com/Microsoft/TypeScript/issues/8306 –

+0

@MikeMcCaughan - 키워드가없는 것 같습니다. 아마도 누군가는 어떤 종류의 해결 방법을 게시 할 것입니다. – bubbleking

+0

[''@ readonly' 데코레이터] (https://www.sitepen.com/blog/2015/10/20/typescript-decorators/)의 사용을 보았습니다. ['Object.freeze' ] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) 개체에,하지만 그건 같은 것은 아니에요 (그것은 클래스에 대한 수정을 허용하지 않습니다). –

답변

4

아니요,이 글을 쓰는 시점에는 없습니다. 아직 고려중인 키워드에 대한 제안이 있지만 구현되지 않을 수도 있습니다.