본문 바로가기

개발하자

유형 스크립트: 트리의 상위 레벨에서 한 모듈에 별칭을 지정할 수 있지만 다른 모듈에는 별칭을 지정할 수 없습니까?

반응형

유형 스크립트: 트리의 상위 레벨에서 한 모듈에 별칭을 지정할 수 있지만 다른 모듈에는 별칭을 지정할 수 없습니까?

다음 모듈 구조를 설정했습니다:

module A.B.C.D {
  var ajaxLibNS = ajaxLibNS || A.B.1;
  var appUtilNS = appUtilNS || A.B.2;
  var appUtil = appUtil || new appUtilNS.AppUtil(); //a class that may be found in module A.B.2

  export class SomeClass implements ISomeInterface {
    //region properties
    private ajaxResponse: ajaxLibNS.IAjaxResponse;
  }
}

컴파일할 때 컴파일러는 "오류 TS2095: 기호 'ajaxLibNS'를 찾을 수 없습니다"라고 불평합니다

나는 컴파일러가 appUtilNS가 모듈 계층의 유사한 위치(즉, "두 개의 레벨 업, 한 개 이상")에 존재하기 때문에 왜 비슷한 불평을 하지 않는지 이해할 수 없다. 그러나 컴파일러의 불만은 없으며 appUtil이 생성된 코드는 정상적으로 실행됩니다.

누가 좀 가르쳐 주시겠어요? 감사합니다!




다음은 단순화된 버전입니다:

module A {
    export class Foo {}
}

module B1 {
    var f = A.Foo;
    var x = new f(); // OK
    var y: f; // Error, can't find symbol f
}

문제는 이 예에서 네임스페이스에만 존재한다는 것입니다. TypeScript에는 유형과 값이라는 두 가지 다른 종류의 이름이 있습니다. 형식 주석을 작성할 때 형식 네임스페이스를 조회합니다. 식 컨텍스트에서 값 네임스페이스를 조회합니다. 선언은 형식 네임스페이스에 기여하지 않습니다.

그러나 선언은 가져온 이름의 의미를 제공합니다. 대신 다음과 같이 쓸 수 있습니다:

module B2 {
    import f = A.Foo; // Change 'var' to 'import'
    var x = new f(); // OK
    var y: f; // OK
}

여기서 생성된 코드는 동일합니다. 이렇게 하면 의 형식 이름이 에 표시됩니다.


반응형