Rlog

[TypeScript] Json 파일 읽어와서 type 으로 변환하기 본문

TypeScript

[TypeScript] Json 파일 읽어와서 type 으로 변환하기

dev_roach 2021. 12. 19. 12:47
728x90

최근 TypeScript 를 가끔씩 쓰면서 Json 파일을 읽어와서 쉽게 Type 으로 Convert 할 수 없을까 고민해봤다.

그래서 Generic 을 이용해서 Convert 하는 방식을 생각했다.

 

이전에 필수적으로 알아야 할 선행지식이 있는데 

바로 TypeScript 의 "unkown" 이라는 개념이다.

 

any 랑 비슷하다고 생각할 수 있는데, any 보다는 Java 로 치면 Object 느낌에 가깝다.

사용하는 측에서 타입 추론이 이루어질 수 있게 도와주므로

Json 을 Unknwon 으로 가져오고 Generic Type 으로 추론해야겠다는 생각이 들었다.

 

따라서 아래와 같은 코드를 작성할 수 있었다.

const ENCODING_TYPE = 'utf8';
const NOT_EXIST_JSON_FILE_ERROR_MESSAGE = "JSON FILE 이 존재하지 않습니다.";

const jsonParserUnknown = (jsonString: string) : unknown => JSON.parse(jsonString)

export default function readJson<T>(path: string) : T {

    const jsonBuffer  = readFileSync(path, {encoding: ENCODING_TYPE})

    const result = jsonBuffer;

    if (!result) {
        throw Error(NOT_EXIST_JSON_FILE_ERROR_MESSAGE);
    }

    return jsonParserUnknown(result) as T;
}

클라이언트 측에서 API 를 사용할때는 아래와 같이 사용할 수 있다.

    const invoiceJsonFile = readJson<Screening[]>(INVOICES_JSON_PATH);
    const playJsonFile = readJson<StaticMovie>(PLAYS_JSON);

느낀점

any 보다는 unkown 을 사용하여 Type 추론이 이뤄진 뒤에 사용하도록 하는게 좋은 것 같다.

'TypeScript' 카테고리의 다른 글

TypeORM DistinctQuery 가 원치 않는데도 나는 문제  (0) 2022.05.27