반응형
유형 스크립트: 트리의 상위 레벨에서 한 모듈에 별칭을 지정할 수 있지만 다른 모듈에는 별칭을 지정할 수 없습니까?
다음 모듈 구조를 설정했습니다:
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
}
여기서 생성된 코드는 동일합니다. 이렇게 하면 의 형식 이름이 에 표시됩니다.
반응형
'개발하자' 카테고리의 다른 글
AR 코어 플래터 플러그인을 작동시키려면 어떻게 해야 하나요? (0) | 2023.05.11 |
---|---|
테라포름 개수가 있는 항목에 대한 상태 표시 (0) | 2023.05.11 |
Kubernetes 클러스터의 WebRTC (0) | 2023.05.09 |
Floating Firebase Messaging Crash Targeting S+(버전 31 이상)에는 FLAG_IMTOUBLE 중 하나가 필요합니다 (0) | 2023.05.09 |
Terraform에서 오류가 발생함 플러그인 스키마를 로드하지 못했습니다 (0) | 2023.05.08 |