#24 일관성 있는 별칭 사용하기

2023. 2. 8.·🎨 프론트엔드 공부/JS & TS
목차
  1. 📍요약
  2. 📍별칭 (alias) 을 수정하면 원본 객체도 수정된다

이펙티브 타입스크립트 (댄 밴더캄 지음) 를 읽고 정리

📍요약

✅별칭(alias)은 type narrowing을 방해한다

✅변수에 별칭을 사용할 때는 일관되게 사용해야 한다 (런타임에서는 문제가 없어도 타입 범위가 달라질 수 있음)

 

📍별칭 (alias) 을 수정하면 원본 객체도 수정된다

- 객체의 프로퍼티를 별칭으로 지정 후 수정해보기

const borough = {name: 'Brooklyn', location: [40.688, -73.979]};
// 별칭(alias) 생성
const loc = borough.location;
// 별칭의 값을 변경하면 원본도 바뀜
loc[0] = 0;

console.log(loc); // [0, -73.979] 
console.log(borough);
/*
{
  "name": "Brooklyn",
  "location": [
    0,
    -73.979
  ]
} 
*/

 

별칭을 남용하면 제어 흐름을 분석하기 어려움

- 별칭을 신중하게 사용해야 함

 

또한 타입 범위가 달라질 수 있음

- 예시

interface Coordinate {
  x: number;
  y: number;
}

interface BoundingBox {
  x: [number, number];
  y: [number, number];
}

interface Polygon {
  exterior: Coordinate[];
  holes: Coordinate[][];
  bbox?: BoundingBox;
}

// HIDE
const polygon: Polygon = { exterior: [], holes: [] };
function calculatePolygonBbox(polygon: Polygon) {
  // ...
}

// END
const { bbox } = polygon; // 구조분해할당이 더 간결함

// bbox가 옵셔널 프로퍼티인 경우
if (!bbox) {
  calculatePolygonBbox(polygon);  // Fills in polygon.bbox -> 함수에서 별칭을 수정
  // Now polygon.bbox and bbox refer to different values!
  // 별칭과 원본이 분리됨
}

function fn(p: Polygon) { /* ... */ }

// 타입이 달라질 수 있음을 주의!!
polygon.bbox  // Type is BoundingBox | undefined
if (polygon.bbox) {
  polygon.bbox  // Type is BoundingBox
  fn(polygon);
  polygon.bbox  // Type is still BoundingBox
}

 

  1. 📍요약
  2. 📍별칭 (alias) 을 수정하면 원본 객체도 수정된다
'🎨 프론트엔드 공부/JS & TS' 카테고리의 다른 글
  • #26 타입 추론에 문맥이 어떻게 사용되는지 이해하기
  • #25 비동기 코드에는 콜백 대신 async 함수 사용하기
  • #23 한꺼번에 객체 생성하기
  • #22 타입 좁히기 (type narrowing)
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (510)
      • 🎨 프론트엔드 공부 (247)
        • JS & TS (86)
        • HTML & CSS (22)
        • React & Next (49)
        • Vue & Nuxt (22)
        • 기타 (68)
      • 🤓 기술 학습 & 공부 기록 (116)
        • Node.js (0)
        • Python (37)
        • 백엔드 (0)
        • 딥러닝 (1)
        • 컴퓨터 일반 (72)
        • 개발 인프라 (6)
      • 👨‍💻 프로젝트 경험 (6)
        • Work (0)
        • Toy (6)
      • ⚙️ 개발 팁 & 노하우 (21)
        • 프론트엔드 (6)
        • 기타 (15)
      • ☕️ 커리어 & 인터뷰 준비 (88)
        • 코딩 테스트 (88)
      • 📰 기술 트렌드 & 생각 정리 (4)
      • 📚 기타 (25)
        • 마케팅 (15)
        • 비개발서적 (10)
  • 블로그 메뉴

    • 태그
  • 링크

  • 공지사항

    • 모바일 접속 시 코드 하이라이팅 깨질 때
  • 인기 글

  • hELLO· Designed By정상우.v4.10.3
지식물원
#24 일관성 있는 별칭 사용하기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.