Classes
Class Members
TS는 ES2015에서 소개된 class 키워드에 대해 모든 지원을 제공한다.
필드의 type annotation은 선택이지만 기본적으로 any로 설정된다.
--strictPropertyInitialization 옵션: 초기화와 생성자 함수에 대한 설정
필드는 생성자 자체에서 초기화되어야 하지만, 다른 수단을 통해 명확하게 초기화하는 경우에는 ! 연산자를 사용할 수 있다.
필드에서는 readonly 수정자를 사용할 수 있다.
생성자
생성자는 반환 타입 표기를 할 수 없고, 타입 파라미터를 가질 수 없다.
외부 클래스 선언
super call: TS에서 super를 호출하는 것을 깜박하면 알려줍니다.
메서드
타입 표기는 함수와 생성자와 동일하다. this를 통해 필드에 접근하는 건 필수이다. 그렇지 않으면 enclosing scope에서 찾아서 사용한다.
게터 세터
TS에서의 특별한 추론 규칙
- 게터가 있는데 세터가 없다면, 해당 필드는 readonly
- 만약 세터 파라미터의 타입이 없다면, 게터의 반환 타입으로 추론됨
인덱스 서명: 잘 이해가 안 됨
Class Heritage
implements clause를 사용해 interface를 만족했는지 확인합니다. 주의 사항으로 내부 메서드 파라미터의 타입을 추론하지 못하고, 옵셔널 속성의 경우 새로 추가할 수 없습니다.
extends clause를 사용해 기존 클래스를 상속할 수 있습니다. overriding을 할 수 있는데 부모 클래스에 접근하기 위해서는 super를 사용한다.
override 할 때 주의 사항은 기존 함수의 형식을 따라야 한다는 점입니다. 예를 들어 파라미터가 없다가 추가하는 경우 옵셔널을 사용해서 override 이전에 함수도 동작할 수 있도록 해야 합니다.
type only field declarations
TS의 설정 중 target이 ES2022 이상이거나 useDefineForClassFields가 true일 때 클래스의 필드 초기화는 부모 클래스의 생성자가 실행된 이후에 실행됩니다.
이때 초기화하는 값을 변경하고 싶은 게 아닌 타입을 변경하고 싶다면 declare를 사용하면 해결할 수 있다.
initialization order
- 부모 클래스 필드 초기화
- 부모 클래스 생성자 함수 실행
- 자식 클래스 필드 초기화
- 자식 클래스 생성자 함수 실행
inheriting built-in types
만약 Array, Error, Map과 같은 built-in type 상속을 사용할 일이 없거나 ES6/ES2015 이상을 타겟으로 한다면 해당 세션 패스
ES6(ES2015)에서 제공하는 super() 함수가 this의 처리를 자동으로 하는데 ES5 이전에는 해당 과정이 없기 때문에 내장 객체인 Error, Array를 상속하기 위해서는 __proto__를 사용해야 할 수 있다.
아직 JS의 클래스에 대한 이해 부족인 건지 전부를 다 이해할 수는 없었다.
참고
'개발 > TS' 카테고리의 다른 글
| [TS] TS Doc Handbook 1회독 - 9 (0) | 2025.06.24 |
|---|---|
| [TS] TS Doc Handbook 1회독 - 8 (0) | 2025.06.20 |
| [TS] TS Doc Handbook 1회독 - 6 (0) | 2025.06.16 |
| [TS] TS Doc Handbook 1회독 - 5 (1) | 2025.06.13 |
| [TS] TS Doc Handbook 1회독 - 4 (0) | 2025.03.04 |