참고 ) naemspace를 쓰기 아주 옛날 고대시적에는
module keyword를 사용했었다.
// 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;
타입스크립트 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 해줘야 한다.
안그러면 위와 같이 에러 문구가 뜬다.
팀 프로젝트를 진행하다가 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 }