Typescript를 다루면서 모듈 내에서 네임 스페이스로 사용되는 클래스를 export
키워드를 먼저 작성하지 않으면 다른 클래스에서 사용할 수 없다는 것을 깨달았습니다 .
module some.namespace.here
{
export class SomeClass{..}
}
이제 위 코드를 다음과 같이 사용할 수 있습니다.
var someVar = new some.namespace.here.SomeClass();
그러나이 키워드가 public
메소드 또는 속성에 외부 액세스 가능해야 함을 나타 내기 위해 메소드 수준에서 사용되는 키워드를 사용하는 것과 반대로 왜 사용되는지 궁금 합니다. 그렇다면 클래스와 인터페이스 등을 외부에서 볼 수 있도록 동일한 메커니즘을 사용하는 이유는 무엇입니까?
결과 코드는 다음과 같습니다.
module some.namespace.here
{
public class SomeClass{..}
}
답변
주요 이유는 export
ECMAScript 계획과 일치하기 때문입니다 . “공개”대신 “내보내기”를 사용해야했지만 “수출 / 비공개 / 보호”와 일치하지 않는 액세스 수정 자 집합을 제외하고는이 둘을 설명하는 데 미묘한 차이가 있다고 생각합니다. .
TypeScript에서 클래스 멤버를 표시 public
하거나 private
생성 된 JavaScript에 영향을 미치지 않습니다. TypeScript 코드가 접근해서는 안되는 것들을 막는 데 사용할 수있는 디자인 / 컴파일 타임 툴입니다.
으로 export
키워드, 자바 스크립트 모듈에 보낸 항목을 추가 할 수있는 라인을 추가합니다. 귀하의 예에서 : here.SomeClass = SomeClass;
.
그래서 개념적으로, 가시성 등의 제어 public
및 private
반면, 단지 도구입니다 export
키워드는 출력을 변경합니다.
답변
Steve Fenton의 답변에 추가해야 할 몇 가지 사항 :
export
이미 두 가지를 의미합니다 (최상위인지 아닌지에 따라 다름). 3 분의 1이public
/를 추가하는 것보다 나쁘다는 것을 의미private
- 구현이 더 쉬워지지는 않습니다.
public
vs 의 추가 된 복잡성export
은 사소하다. 이미 여러 키워드를 변경했습니다. 어렵지 않습니다. - ES6 클래스 제안과 일치 하려면 클래스 멤버의 기본 공개 가 공개 되어야 하므로 “비공개”를 나타내는 키워드가 필요합니다. 적절한 반의어가없는
export
(unexport
??)private
논리적 인 선택도 있습니다. 일단 당신이private
, 그것public
의 상대로 선택하지 않는 것은 약간 미친 것입니다 - 의 사용
export
내부 모듈에 대한 가시성을 수정은 ES6 모듈과 가장 잘 추측 정렬입니다