abstract는 앞서 언급한 접근 수식어로 생각할 수 있지만 클래스 뿐만 아니라 클래스의 구성 요소에도 사용할 수 있기 때문에 별도로 제시합니다. abstract 수식어는 기본적으로 해당 기능이 직접적으로 실행될 수 없음을 뜻하고 자식 클래스가 그 기능을 제공해야 함을 뜻합니다.
abstract클래스 는 직접 인스턴스를 만들 수 없습니다. 대신 이 abstract class 를 상속하는 다른 class 를 만들어야 합니다.
abstractclassFooCommand {}classBarCommandextendsFooCommand {}constfooCommand:FooCommand=newFooCommand(); // abstract 클래스 인스턴스는 생성할 수 없음.constbarCommand=newBarCommand(); // abstract 클래스를 상속한 클래스의 인스턴스는 생성 가능.
abstract구성 요소 는 직접 액세스할 수 없고 자식 클래스가 그 기능을 제공해야 함니다.
abstractclassFooCommand {abstractexecute():string;}classBarErrorCommandextendsFooCommand {} // 'BarErrorCommand'는 추상(abstract) 멤버인 'execute'를 제공해야 함.classBarCommandextendsFooCommand {execute() {return`Command Bar executed`; }}constbarCommand=newBarCommand();barCommand.execute(); // Command Bar executed 출력
Constructor is optional
클래스는 constructor를 항상 포함하지 않아도 됩니다. 예제를 참조하십시요
classFoo {}var foo =newFoo()
constructor 사용방법
아래처럼 클래스 내 멤버를 초기화하십시요
classFoo { x:numberconstructor(x:number) {this.x = x }}
타입스크립트는 구성원에 엑세스 수식어를 접두어로 사용하는 일반적인 패턴으로 클래스에 자동으로 선언되어 생성자에서 복사됩니다. 따라서 이전에 작성한 예를 (public x:number)와 같이 작성할 수 있습니다.
classFoo {constructor(public x:number) {}}
Property 초기화
이것은 타입스크립트에서 지원되는 멋진 기능입니다. (실제로 ES7에서 지원됨) 클래스 생성자 밖에서 요소를 초기화 할 수 있으며 기본값을 제공하는데 유용합니다. (members = [])
classFoo { members = [] // Initialize directlyadd(x) {this.members.push(x) }}