Post

타입스크립트 - 네임스페이스

name spaces

라이브러리를 가져다 쓰다보면 남이 만든 인터페이스와 의도치 않게 병합되는 경우들이 생기는데,
이러한 병합을 방지하기 위해 사용하는 인터페이스

타입스크립트 공식 문서 - name spaces

1
2
3
4
5
6
7
8
9
10
11
namespace Example {
  interface Inner {
    test: string;
  }
  type test = number;
}

// Namespace 'Example' has no exported member 'Inner'.
const ex1: Example.Inner = {
  test: "hello"
};
  • 네임스페이스 타입을 사용하려면 앞에 export를 작성해주어야 한다.
1
2
3
4
5
6
7
8
namespace Example {
    export interface Inner {
        test: string
    }
}
const ex2: Example.Inner = {
    test: 'hello'
}
  • 네임스페이스 자체를 자바스크립트 값으로 사용할 수 있다.
1
2
3
4
5
6
7
namespace Ex {
  export const a = "real";
}

const a = Ex; // {a: 'real'}
const b = Ex.a; // real
const c = Ex["a"]; // real
  • 네임스페이스 이름이 겹치는 경우 병합된다. 내부에 같은 이름의 인터페이스가 있다면 합쳐지고, 내부에 같은 이름의 타입 별칭이 있다면 에러가 발생한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
namespace Example {
  export interface Inner {
    test: string;
  }
  export type test2 = number;
  // Error!
  // Duplicate identifier 'test2'.
}
namespace Example {
  export interface Inner {
    test1: string;
  }
  export type test2 = number;
  // Error!
  // Duplicate identifier 'test2'.
}
const ex: Example.Inner = {
  test: "합쳐집니다",
  test1: "합쳐졌어요"
};
This post is licensed under CC BY 4.0 by the author.