[ Typescript ] - namespace

최문길·2023년 12월 23일
1

Typescript

목록 보기
17/23

참고 ) naemspace를 쓰기 아주 옛날 고대시적에는
module keyword를 사용했었다.

현재 import, export

  • 기존 javascript를 사용하는 것처럼 하면 된다.
  • ts 파일 확장자는 안붙인다.


// sampleA.ts

export type Name = string
export type Age = (a:number) => number;
// SampleB.ts

import {Name, Age} from './sampleA'
let 이름: Name = 'kim';
let ageFunc : Age =(a) => 30;



namespace


타입스크립트 1.5버전이하는 import / export 문법이 없기에
그냥 <script src=''> 를 사용하여 파일들을 첨했지만 겹치는 위험이 있기에
이와 같은 맥락으로

타입변수들은 namespace 문법으로 숨겼다.




// SampleA.ts

namespace S {
   interface A { age:number}
   export type NameType = string |number
   export type B = number
}

type B = number

// SampleB.ts
const sampleA : S.B = 1 // O 가능

// Namespace " S " has no exported memeber 'A'.
const sampleB : S.A = {age : 30}  // X error

이렇게 어느 한 파일에서 namespace안에 타입을 정의하고 그 안에 있는 타입을 사용 할 때

네임스페이스명.타입명

그리고

다른 파일에서 namespace 안에서 정의된 타입을 꺼내 쓰려면 export 해줘야 한다.

안그러면 위와 같이 에러 문구가 뜬다.

namespace- 응용

팀 프로젝트를 진행하다가 A와 B 개발자의 타입 명이 중복이 되었다. 테스트와 배포를 해야 할 시간이 빠듯 한데....

이럴 때 어떻게 해야 할까 ??

type Num = number;
interface Num = { age : number }

const a : Num = 1;
const b : Num = { age : 30 }



빠르게 타입 명을 namespace 로 감싸줘 보자

namespace AtypeNum {
  type Num = number
}

namepsace BtypeNum {
  interface Num = { age : number }
}

const a : AtypeNum.Num = 1
const b : BtypeNum.Num = { age :  30 }

0개의 댓글