티스토리 뷰
1장. 타입스크립트 알아보기
아이템 1~5
아이템 1. 타입스크립트와 자바스크립트의 관계 이해하기
- 모든 JS 프로그램은 이미 TS 프로그램이다. 반대로, TS는 일반적으로 유효한 JS프로그램이 아니다.
- 코드의 의도가 무엇인지 타입 구문을 통해 타입스크립트에게 알려줄 수 있기 때문에 코드의 동작과 의도가 다른 부분을 찾을 수 있다.
- TS는 JS 런타임 동작을 모델링하는 타입 시스템을 가지고 있기에 런타임 오류를 발생시키는 코드를 찾아내려고 한다. 모든 오류를 찾아낼 순 없다. 타입 체커를 통과하면서도 런타임 오류를 발생시키는 코드는 존재할 수 있다.
아이템 2. 타입스크립트 설정 이해하기
- cli 가 아닌 설정 파일(tsconfig.json)을 사용하자. 팀원과 공유하기 위함.
- 엄격한 체크를 하고 싶다면 strict 설정 고려하기.
- 가급적 noImplicitAny 설정하기
// noImplicitAny: false
// 암묵적으로 any 타입으로 간주함.
function add(a, b) {
return a + b;
}
// noImplicitAny: true
// 오류로 표시됨, any 또는 분명한 타입을 사용하면 해결 가능
function add(a: number, b: number) {
return a + b;
}
- strictNullChecks: null과 undefined가 모든 타입에서 허용되는지 확인하는 설정, 가급적 설정을 추천함.
// strictNullChecks: false
const x: number = null // 정상
// strictNullChecks: true
const x: number = null; // 오류
// null을 허용하고 싶으면 명시적으로 의도를 드러내야함.
const x: number | null = null;
// null을 허용하지 않으려면 null 체크 코드 또는 단언문을 추가해야함.
const el = document.getElementById('status');
el.textContent = 'ready'; // 오류
if (el) {
el.textContent = 'ready'; // ok
}
el!.textContent = 'ready'; // ok
아이템 3. 코드 생성과 타입이 관계없음을 이해하기
- 코드 생성은 타입 시스템과 무관하다.
- TS 타입은 런타임 동작이나 성능에 영향을 주지 않는다.
- TS 타입은 런타임에 사용할 수 없다.
아이템 4. 구조적 타이핑에 익숙해지기
- 덕 타이핑: 객체가 어떤 타입에 부합하는 변수와 메서드를 가질 경우 객체를 해당 타입에 속한 것으로 간주하는 방식
- JS는 덕 타이핑 기반이다. TS는 매개변수 값이 요구사항을 만족한다면 타입이 무엇인지 신경 쓰지 않는 동작을 그대로 모델링한다.
- 클래스 역시 구조적 타이핑 규칙을 따른다.
- 구조적 타이핑을 사용하면 유닛 테스팅을 더 쉽게 할 수 있다.
interface PostgresDB {
runQuery: (sql: string) => any[];
}
interface Author {
first: string;
last: string;
}
// ex1. 테스트를 위해 mocking한 PostgresDB 생성이 필요함.
function getAuthors(database: PostgresDB): Author[] {
const authorRows = database.runQuery(`SELECT FIRST, LAST FROM AUTHORS`);
return authorRows.map(row => ({first: row[0], last: row[1]}));
}
// ex2. 실제 DB 정보, 모킹 라이브러리 필요 없음.
interface DB {
runQuery: (sql: string) => any[];
}
function getAuthors(database: DB): Author[] {
const authorRows = database.runQuery(`SELECT FIRST, LAST FROM AUTHORS`);
return authorRows.map(row => ({first: row[0], last: row[1]}));
}
아이템 5. any 타입 지양하기
- any 타입 사용은 타입 체커와 TS 언어 서비스를 무력화시킨다. 최대한 사용을 피하자.
참고: 이펙티브 타입스크립트
'책 > misc' 카테고리의 다른 글
알림 시스템 설계 (0) | 2022.07.09 |
---|---|
분산 시스템을 위한 유일 ID 생성기 설계 (0) | 2022.07.09 |
안정 해시 설계 (2) | 2022.06.21 |
처리율 제한 장치의 설계 (3) | 2022.06.19 |
3장. HTTP 메시지 (0) | 2022.05.02 |
링크
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 프로그래머스 SQL
- js api
- 이펙티브자바
- 드림코딩
- http
- 김영한 http
- 이펙티브자바 아이템60
- js array
- 이펙티브자바 아이템59
- java
- 백준
- GCP
- Spring Security
- dreamcoding
- 킹수빈닷컴
- REST API
- HTTP 완벽가이드
- JS 딥다이브
- js promise
- 패스트캠퍼스 컴퓨터공학 완주반
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 백기선 스터디
- ㅇㄷㅇㅈ
- 모던자바스크립트
- 프로그래머스
- JPA 연관관계 매핑
- HTTP 완벽 가이드
- 김영한 JPA
- BOJ
- 이펙티브자바 스터디
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함