무엇이 TS를 TS답게 하는가?
TypeScript
왜 사용하는가?
- 컴파일 단계에서 오류를 잡아준다.
- 리팩토링을 쉽게 해줄 수 있다.
- 코드 작성을 편하게 해준다.
어떻게 편리하게 만들어줄 수 있는가?
- 컴파일 단계에서 어떻게 오류를 잡아주는가?
- 리팩토링을 어떻게 쉬워지게 해주는가?
- 코드작성을 편하게 어떻게 만들어주는가?
TS가 이러한 이점을 주는지 생각하지 않고 쓴다면, 무슨 의미가 있을까..
권장되는 타입스크립트 코드 작성
any
와 string
타입을 지나치게 사용하지 않는다.
enum
대신 문자열과 매직 넘버를 사용하지 않는다.
- 같은 구조의 인터페이스를 별도로 선언하지 않는다.
- JS에서 사용하면 패턴을 TS에서 사용하지 않는다.
IDE 권장 설정
vsCode - 설정 - lens typescript
➡️
typeScript › Implementations Code Lens: Enabled
typeScript › References Code Lens: Enabled
typeScript › References Code Lens: Show On All Functions
체크가 안되어 있다면, 체크한다.
Enum과 구조체 정의
string
을 몰아내자.
➡️ Why? : 오타로 인한 오류 발생 가능성 높음.
- 제너릭을 사용하자.
- 구조체의 필드명을 타입으로 사용할 수 있다.
- enum을 구조체의 필드명으로 사용할 수 있다.
- 파생된 구조체 만들기
- Pick, Omit, Partial, Nullable
등..
- 서로 관련되지 않은 정의를 한 곳에 모아두지 않기.
➡️ Why? : 수정과 삭제하는데 어려움.
- 사용하지 않는데 남아있는 선언은 네임스페이스를 더럽히므로 언젠가 문제가 된다.
Interface
- JS에는 인터페이스가 없다.
- 타입 참조도 참조다. 참조는 곧 의존성이다.
- JS에서는 인터페이스 없이 의존성 역전이 가능하지만, TS에서는 인터페이스가 있어야 한다.
- JS에는 메서드 오버로딩이 없다.
- TS에서도 못 한다.
- 인터페이스는 제공하지만, JS의 가변 인자로 구현해야 한다.
타입 캐스팅
- 타입 캐스팅을 할 때는 변수나 타입을 선언하자.
- 타입 캐스팅(as
)을 할 때는 괄호로 감싸지 말고 변수를 선언하자.
- 제네릭을 사용할 때마다 인자를 입력하지 말고, 미리 제네릭이 포함된 타입 선언을 하자.
정리
- 무조건 코드를 짧게 쓰는 것도, 무조건 타입을 추가하는 것도 능사가 아님.
- 최대한으로 코드의 변경을 추적하고, IDE의 도움을 얻기 위해 노력해야한다.
- 타입을 선언하고, 사용할 때는 이것이 코드 추적에 어떤 도움을 줄까 생각해보기.
여기에 쏟은 노력과 시간은 더 큰 이득으로 되돌아올 것이 분명함.