TypeScript 시작하기 (17) - 타입도 import export 해서 씁니다 그리고 namespace

funfungun·2025년 1월 17일
0

TypeScript 시작하기

목록 보기
17/18
post-thumbnail

이번 시간에는 타입의 import, export 와 namespace 에 대해 알아보겠습니다.


  1. 우선, 타입도 import 와 export 가 가능합니다.

    // a.ts
    export type Name = string;
    //index.ts
    import { Name } from "./a";
    
    let practice: Name = "park";

  1. 옛날에는 import 와 export 문법이 없어서 다른 파일의 내용을 가져오려면 <script> 태그로 첨부했는데, 이러다보니 변수명이 겹치는 경우가 많았습니다. 그래서 함수로 싸매는 등 방법이 있었으나, typescript 초창기에는 namespace 라는 것을 사용했습니다. Object 와 유사하게 사용되는데, 다른 파일에서 사용할 때는 reference 라는 구문을 선언함으로써 사용할 수 있었습니다.

    //a.ts
    namespace practice {
      export type Name = string | number;
    }
    
    let temp: practice.Name = "kim";
    //index.ts
    ///<reference path="./a.ts" />
    
    let practice: practice.Name = "park";

  1. 참고로 module 도 namespace 와 같은 키워드인데, 예전 버전에서 사용하던 것이라고 알아두면 좋습니다.

    //a.ts
    module practice {
      export type Name = string | number;
    }
    
    let temp: practice.Name = "kim";

  1. 연습으로 Car 와 Bike 타입을 만들었는데, 너무 길어서 다른 파일로 옮긴다고 가정해봅시다. 다른 파일은 아무데나 저장한 후, index.ts 에서 가져와 변수를 만들 때 사용해봅시다.

    type Car = {
      wheel: number;
      model: string;
    };
    
    interface Bike {
      wheel: 2;
      model: string;
    }
    //a.ts
    export type Car = {
      wheel: number;
      model: string;
    };
    
    export interface Bike {
      wheel: 2;
      model: string;
    }
    //index.ts
    import { Car, Bike } from "./a";
    
    const car: Car = {
      wheel: 4,
      model: "bmw",
    };
    
    const bike: Bike = {
      wheel: 2,
      model: "deliver",
    };

  1. 추가로, 너무 자주 만들어 쓰는 함수가 있다고 가정해봅시다.
  • 이 함수는 파라미터로 object 자료 하나를 선택적으로 집어넣을 수 있고, 아무것도 return 하지 않습니다.

  • 함수를 만들 때마다 타입을 일일이 붙이기 귀찮을 때, 타입을 다른 파일에 저장해두고 import 해서 사용할 수 있도록 하려면 어떻게 해야 할까요?

    //a.ts
    export type ObjFunction = (a?: object) => void;
    //index.ts
    import { ObjFunction } from "./a";
    
    let practice: ObjFunction = function (a) {
      console.log(a);
    };
    
    practice({ abc: "hi" });

  1. 마지막으로, 타입 중복이 너무 많이 발생하는 아래 코드의 에러를 없애야하는데, 어떻게 코드를 짜야할까요? (type Dog, interface Dog 의 타입이름 변경과 파일 분할은 금지.)

    type Dog = string;
    interface Dog {
      name: string;
    }
    
    let dog1: Dog = "bark";
    let dog2: Dpg = { name: "paw" };
    namespace GoodDog {
      export type Dog = string;
    }
    namespace BadDog {
      export interface Dog {
        name: string;
      }
    }
    
    let dog1: GoodDog.Dog = "bark";
    let dog2: BadDog.Dog = { name: "paw" };

지금까지 타입의 import, export 와 namespace 에 대해 알아보았습니다. 다음 시간에는 타입을 파라미터로 입력하는 Generic 에 대해 알아보겠습니다.

profile
Commercial Art

0개의 댓글