일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 공변성
- autosize
- 호이스팅
- async/await
- map
- 인터섹션
- Promise
- useAppDispatch
- Cypress
- 무한 스크롤
- webpack
- 결정 알고리즘
- 타입 좁히기
- SSR
- 이분 검색
- ESlint
- CORS
- Jest
- 투포인터
- CI/CD
- tailwind
- TS
- recoil
- React
- RTK Query
- app router
- dfs
- 반공변성
- 태그된 유니온
- 리터럴 타입
- Today
- Total
짧은코딩
객체 래퍼 타입 지양하기 & 함수 표현식과 타입스크립트 본문
객체 래퍼 타입
객체 래퍼 타입은 원시 타입의 값을 감싸는 형태의 객체이다. 예를 들어 string -> String, number -> Number 이런 식으로 사용한다. 기본 원시 타입들은 불변이며 메서드를 가지지 않는 점이 객체와 구분된다.
"apple".charAt(2);
// "p"
하지만 이 코드를 보면 기본 원시 타입도 메서드를 가진 것처럼 보인다. 사실 charAt는 string의 메서드가 아니고 자바스크립트 내부에서 string을 String으로 바꿔서 사용하기 때문에 charAt 같은 메서드를 사용할 수 있다. 즉, 기본형(원시 타입)과 객체 타입을 서로 자유롭게 변환 가능하다. 따라서 이 과정에서 string을 String 객체로 래핑(wrap)하고 이후 마지막으로 래핑한 객체를 버린다.
let x = "hello";
x.language = "English";
console.log(x.language); // undefined
위에서 말했듯이 마지막으로 래핑된 객체는 버려져서 위 코드의 출력값이 undefined가 나온다.
string은 String에 할당할 수 있지만 String은 string에 할당할 수 없다. 따라서 기본형(원시 타입)을 주로 사용하는 것이 좋은 방법이다.
함수 표현식
function rollDice1(sides: number): numbuer {/*...*/} // 문장
const rollDice2 = function(sides: number): number {/*...*/}; // 표현식
const rollDice3 = (sides: number): number => {/*...*/}; // 표현식
타입스크립트에서는 함수 표현식을 사용하는 것이 좋다. 그래야 재사용하기 좋다.
-재사용 간단한 예시
type DiceRollFn = (sides: number) => number;
const rollDice: DiceRollFn = sides => {/*...*/};
이렇게 코딩을 하고 rollDice의 sides에 마우스를 올려보면 number가 뜬다.
-재사용 복잡한 예시
// 재사용 안 한 코드
function add(a: number, b: number) {
return a + b
}
function sub(a: number, b: number) {
return a - b
}
function mul(a: number, b: number) {
return a * b
}
function div(a: number, b: number) {
return a / b
}
// 재사용 한 코드
type BinaryFn = (a: number, b: number) => number
const add: BinaryFn = (a, b) => a + b
const sub: BinaryFn = (a, b) => a - b
const mul: BinaryFn = (a, b) => a * b
const div: BinaryFn = (a, b) => a / b
이 코드에서만 봐도 함수 타입 선언으로 코드의 반복을 줄일 수 있다.
함수 매개변수에 타입 선언을 하는 것보다 함수 표현식 전체 타입을 정의하는 것이 코드의 안정성과 가독성을 높혀준다. 다른 함수의 시그니처와 동일 한 타입을 가지는 함수 작성, 동일한 타입을 가지는 여러 개의 함수를 작성할 때는 위처럼 타입을 반복하지 않고 타입 선언을 적용하면 좋다.
'TS > 이펙티브 타입스크립트' 카테고리의 다른 글
타입 반복 줄이기(필독) (1) | 2023.02.23 |
---|---|
type과 interface (0) | 2023.02.21 |
타입 선언문과 단언문 (0) | 2023.02.10 |
타입과 값 구분하기 (0) | 2023.02.10 |
TS의 타입 (0) | 2023.01.21 |