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 관련된 의존성을 가지지 않게 해야한다.
'Typescript' 카테고리의 다른 글
[TypeScript] Component Polymorphic하게 사용하기 (0) | 2024.01.27 |
---|---|
[Tspec] TypeScrip 기반 OpenApi Spec,Swagger 만들기 (0) | 2023.07.09 |
[TypeScript] 타입들 optional하게 변형하기 (0) | 2023.04.27 |
[Effective TypeScript] item52 테스팅 타입의 함정에 주의하기 (0) | 2023.04.04 |