Develop/TypeScript

[Typescript] type import export & namespace

dawonny 2024. 1. 13. 00:31
728x90
반응형

type import export

a.ts 파일에 있는 것을 b.ts에서 쓰고싶다면 다음과 같이 코드를 작성할 수 있다.

(a.ts)

export type Name = string | boolean;
export type Age = (a :number) => number;
(b.ts)

import {Name, Age} from './a'
let 이름 :Name = 'kim';
let 함수 :Age = (a) => { return a + 10 }

 

namespace

과거에는 자바스크립트의 import export 문법이 없었다

그래서 <script src="~~~"> 코드를 써서 다른 파일들을 일종의 첨부처럼 했는데

이러면 파일이 많아질 수록 변수명이 겹치는 위험이 발생할 수 있었다.

그래서 외부파일에서 사용하지 않을 변수들은 함수로 감쌌었는데, 타입변수들은 namespace 문법으로 숨겼다.

(a.ts)

namespace MyNamespace {
  export interface PersonInterface { age : number };
  export type NameType = number | string;
}

위와같이 MyNamespace 라는 namespace 를 만들어서 타입정의들을 그 안에 작성해준다.

 

(b.ts)

/// <reference path="./a.ts" />

let 이름 :MyNamespace.NameType = '민수';
let 나이 :MyNamespace.PersonInterface = { age : 10 };

type NameType = boolean; //사용 가능
interface PersonInterface {} //사용 가능

만약 b 파일에서 a 파일의 namespace 에 있던 타입변수를 쓰고 싶다면

<reference/> 태그를 작성한 후, 네임스페이스명.타입명 이런식으로 작성해주면 가져다 쓸 수 있다.

이렇게 . 을 찍어서 사용해야하기 때문에 다른 변수명을 오염시키지 않는다.

 

사실 자바스크립트 es6 버전이 나온 후로 import as 라는 키워드가 생겼기 때문에

namespace 처럼 변수명 중복 문제를 해결할 수 있어서 namespace 를 많이 쓰지는 않는다고 한다.

(나도 개발할때 namespace 보단 import as 문법을 많이 쓴 것 같다)

 

응용 예제

(a.ts)

export type Car = {
  wheel : number,
  model : string
}
export interface Bike {
  wheel : 2,
  model : string
}

a.ts 파일에는 타입만 담아두고, 아래의 index.ts 에서 타입들을 import 해와서 사용할 수 있겠다.

(index.ts)

import {Car, Bike} from './a'

let 빠방이 :Car = { wheel : 4, model : 'Sonata' }

 


ref: 코딩애플

728x90
반응형