Typescript

[Effective TypeScript] item51 의존성 분리를 위해 미러 타입 사용하기

차노도리 2023. 4. 4. 17:28

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

 

미러링

  • 작성중인 라이브러리가 의존하는 라이브러리의 구현과 무관하게 타입에만 의존한다면, 필요한 선언부만 추출하여 작성 중인 라이브러리에 넣는것

 

미러링을 사용하지 않은 CSV 파일 파싱 라이브러리

// Buffer Type은 NodeJs 타입 선언 설치해서 얻을수있음
// npm install --save-dev @types/node

function parseCSV(contents: string | Buffer): {[column: string]: string}[]  {
  if (typeof contents === 'object') {
    // 버퍼인 경우
    return parseCSV(contents.toString('utf8'));
  }
  ...
}

 

해당 파일 파싱 라이브러리 사용 문제점

  • 타입 선언도 포함하게 된다.
  • @types/node devDependecies를 포함해야한다.

아래 그룹 사용자 문제

  • @types와 무관한 자바스크립트 개발자
  • NodeJs와 무관한 타입스크립트 웹 개발자

 

 

미러링을 사용한 CSV 파일 파싱 파이브러리 예제

  • 구조적 타이핑을 이용해 위 문제점 해결
// 구조적 타이핑으로 toString 메서드를 가지는 인터페이스 별도로 사용
interface CsvBuffer {
  toString(encoding: string): string;
}
function parseCSV(contents: string | CsvBuffer): {[column: string]: string}[]  {
  ...
}

 

요약

  • 필수가 아닌 의존성을 분리할 때는 구조적 타이핑을 사용하면 된다.
  • 공개한 라이브러리를 사용하는 자바스크립트 사용자가 @Types, NodeJS 관련된 의존성을 가지지 않게 해야한다.

 

https://effectivetypescript.com/

 

Effective TypeScript › 62 Specific Ways to Improve Your TypeScript

Effective TypeScript: 62 Specific Ways to Improve Your TypeScript

effectivetypescript.com