#51 의존성 분리를 위해 미러 타입 사용하기

2023. 4. 27.·🎨 프론트엔드 공부/JS & TS

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

📍요약

✅필수가 아닌 의존성을 분리할 때는 구조적 타이핑을 사용하면 됩니다

✅공개한 라이브러리를 사용하는 자바스크립트 사용자가 @types 의존성을 갖지 않게 해야 합니다.

그리고 Node.js를 사용하지 않는 개발자(TypeScript 사용자)가 Node.js 관련된 의존성을 갖지 않게 해야 합니다.

 

📍CSV 파일을 파싱하는 라이브러리를 만들고 있다고 가정하면..

로컬 시스템의 csv 파일을 읽기 위해 Buffer 타입이 필요하다

Buffet 타입은 @types/node 에 정의되어 있으므로 해당 타입 선언을 라이브러리에 포함하게 된다

 

// @types/node 설치 필요

function parseCSV(contents: string | Buffer): {[column: string]: string}[]  {
  if (typeof contents === 'object') {
    // It's a buffer
    return parseCSV(contents.toString('utf8'));
  }
  // COMPRESS
  return [];
  // END
}

 

그런데, @types/node를 설치해야 한다면.. 두 그룹의 유저에게 문제가 생긴다

- TypeScript 비사용자 : JavaScript만 사용하므로 @types/node 를 설치할 필요가 없음!

- TypeScript 사용자 : Node.js 를 사용하지 않으므로 @types/node 를 설치할 필요가 없음!

 

📍구조적 타이핑으로 모듈 설치 대신 직접 타입 선언 : 미러링

Buffer 사용 대신 직접 필요한 부분만 명시하여 사용 => Buffer 완벽 지원

interface CsvBuffer {
  // Buffer를 사용하지 않고 직접 구현한 메서드
  toString(encoding: string): string;
}
function parseCSV(contents: string | CsvBuffer): {[column: string]: string}[]  {
  // COMPRESS
  return [];
  // END
}

 

이를 미러링(mirroring) 이라고 한다

 

✅미러링 : 라이브러리를 작성할 때,타입 (예 - @types/node) 만 필요하다면,

직접 설치하지 않고 필요한 선언부만 추출 및 구현하여 작성중인 라이브러리에 넣는 것

 

다른 라이브러리의 타입 선언 대부분을 사용해야 한다면, 미러링 대신 그냥 명시하여 사용하는 것이 낫다

'🎨 프론트엔드 공부/JS & TS' 카테고리의 다른 글
  • [TypeScript] 객체의 배열에서 특정 키의 모든 밸류를 union type으로 추출하기
  • ES2023 새로운 Array 메서드 알아보기
  • #50 오버로딩 타입보다는 조건부 타입을 사용하기
  • #49 콜백에서 this에 대한 타입 제공하기
지식물원
지식물원
지식이 자라는 식물원!
  • 지식물원
    지식물원
    지식물원
  • 전체
    오늘
    어제
    • 분류 전체보기 (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
지식물원
#51 의존성 분리를 위해 미러 타입 사용하기
상단으로

티스토리툴바