티스토리 뷰

목차

    반응형

    TypeScript 2.9에는 새로운 기능이 도입되었습니다. --resolveJsonModuleTypeScript 컴파일러 옵션으로 JSON 모듈을 가져올 수 있게 되었습니다.


    #require 호출로 JSON 모듈 가져오기

    TypeScript로 작성된 Node 애플리케이션이 있다고 가정하고 다음 JSON 파일을 가져온다고 가정합니다.


    {
    "server": {
    "nodePort": 8080
    }
    }


    Node에선 다음처럼 사용할 수 있습니다.

    require를 CommonJS 모듈 사용할 때와 같은 방법으로 JSON 파일을 import 합니다.


    const config = require("./config.json");


    JSON은 자동으로 일반 JavaScript 객체로 역직렬화됩니다. 이를 통해 구성 객체의 속성에 쉽게 액세스할 수 있습니다.


    "use strict";


    const express = require("express");
    const config = require("./config.json");


    const app = express();


    app.listen(config.server.nodePort, () => {
    console.log(`Listening on port ${config.server.nodePort} ...`);
    });


    여기까진 그런대로 잘 됩니다.



    정적 import 선언을 통해 JSON 파일 가져오기

    이제 CommonJS 모듈 대신 기본 ECMAScript 모듈을 사용한다고 가정합니다. 즉, require 호출을 정적 import 선언으로 변환합니다.


    // We no longer need the "use strict" directive since
    // all ECMAScript modules implicitly use strict mode.

    import * as express from "express";
    import * as config from "./config.json";

    const app = express();

    app.listen(config.server.nodePort, () => {
    console.log(`Listening on port ${config.server.nodePort} ...`);
    });


    이렇게 하면, 2번 라인에서 타입 오류가 발생합니다. TypeScript를 사용하면 JSON 모듈을 바로 가져올 수 없습니다. 이것은 TypeScript 팀이 의도한 디자인 결과 때문입니다. 큰 JSON 파일을 가져오면 많은 메모리가 소비되므로 --resolveJsonModule 컴파일러 플래그를 활성화한 뒤 해당 기능을 선택해야 합니다.


    사람들이 의도적으로 선택하도록 유도하는 것 = 그것은 사용자가 비용 발생을 이해한다는 것을 의미합니다.


    tsconfig.json 파일에 resolveJsonModule 옵션을 활성화하세요.


    {
    "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "strict": true,
    "moduleResolution": "node",
    "resolveJsonModule": true
    }
    }


    --resolveJsonModule 활성화하면 TypeScript 파일에 타입 에러가 발생하지 않습니다. 더 좋은 것은 타입 체크와 자동 완성 기능이 제공된다는 것입니다!

    영상 내용 : app.listen(config.server.nodePort 자동 완성




    위에 표시된 컴파일러 옵션으로 TypeScript 파일을 컴파일하면 다음과 같은 JavaScript 출력을 확인할 수 있습니다.


    "use strict";

    Object.defineProperty(exports, "__esModule", { value: true });

    const express = require("express");
    const config = require("./config.json");
    const app = express();

    app.listen(config.server.nodePort, () => {
    console.log(`Listening on port ${config.server.nodePort} ...`);
    });


    출력 내용은 초기 require 버전과 거의 똑같습니다.


    "use strict";

    const express = require("express");
    const config = require("./config.json");
    const app = express();

    app.listen(config.server.nodePort, () => {
    console.log(`Listening on port ${config.server.nodePort} ...`);
    });


    사용하기 쉽네요. 하나의 컴파일러 옵션 하나만으로 TypeScript Json 모듈을 쉽게 사용할 수 있습니다.


    관련 글

    [C# JSON] JSON 생성 및 사용, 예제 소스

    TypeScript 강좌 4. 호환성 tsconfig.json

    TypeScript 문자열 숫자 변경 - 단항연산자 (string to int)

    반응형