Typescript가 키워드“export”를 사용하여 클래스와 인터페이스를 공개하는 이유는 무엇입니까?


136

Typescript를 다루면서 모듈 내에서 네임 스페이스로 사용되는 클래스를 export키워드를 먼저 작성하지 않으면 다른 클래스에서 사용할 수 없다는 것을 깨달았습니다 .

module some.namespace.here
{
   export class SomeClass{..}
}

이제 위 코드를 다음과 같이 사용할 수 있습니다.

var someVar = new some.namespace.here.SomeClass();

그러나이 키워드가 public메소드 또는 속성에 외부 액세스 가능해야 함을 나타 내기 위해 메소드 수준에서 사용되는 키워드를 사용하는 것과 반대로 왜 사용되는지 궁금 합니다. 그렇다면 클래스와 인터페이스 등을 외부에서 볼 수 있도록 동일한 메커니즘을 사용하는 이유는 무엇입니까?

결과 코드는 다음과 같습니다.

module some.namespace.here
{
   public class SomeClass{..}
}

답변:


177

주요 이유는 exportECMAScript 계획과 일치하기 때문입니다 . "공개"대신 "내보내기"를 사용해야했지만 "수출 / 비공개 / 보호"와 일치하지 않는 액세스 수정 자 집합을 제외하고는이 둘을 설명하는 데 미묘한 차이가 있다고 생각합니다. .

TypeScript에서 클래스 멤버를 표시 public하거나 private생성 된 JavaScript에 영향을 미치지 않습니다. TypeScript 코드가 접근해서는 안되는 것들을 막는 데 사용할 수있는 디자인 / 컴파일 타임 툴입니다.

으로 export키워드, 자바 스크립트 모듈에 보낸 항목을 추가 할 수있는 라인을 추가합니다. 귀하의 예에서 : here.SomeClass = SomeClass;.

그래서 개념적으로, 가시성 등의 제어 publicprivate반면, 단지 도구입니다 export키워드는 출력을 변경합니다.


1
정보에 감사드립니다. 결정은 키워드의 컨텍스트를 확인하지 않아도된다는 가정하에 이루어졌으며, 이는 소수의 사람들을 넘어서게되며 실제로는 행동에 논리적 차이가없는 느낌이 든 수치입니다. 대중의 행동을 기대하는 방법에 따라 구현이 더 쉬워집니다.
Grofit

고마워 머리카락을 잡아 당겨 저장합니다.
Kent Aguilar

1
모듈을 사용하는 경우 필요합니다. 앱이 더 큰면을 지향한다면 일반적으로 큰 번들을 만들거나 모든 파일을 미리로드하는 것보다 모듈이 더 좋습니다.
펜턴

@Fenton "내보내기"대신 '공개'를 사용해야했다고 주장 할 수 있습니까?
Alan Evangelista

@ AlanEvangelista는 특히 배경이 JavaScript가 아닌 Java / C # 인 경우 확실히 그렇게 주장 할 수 있습니다.
펜턴

49

Steve Fenton의 답변에 추가해야 할 몇 가지 사항 :

  • export 이미 두 가지를 의미합니다 (최상위인지 아닌지에 따라 다름). 3 분의 1이 public/를 추가하는 것보다 나쁘다는 것을 의미private
  • 구현이 더 쉬워지지는 않습니다. publicvs 의 추가 된 복잡성 export은 사소하다. 이미 여러 키워드를 변경했습니다. 어렵지 않습니다.
  • ES6 클래스 제안과 일치 하려면 클래스 멤버의 기본 공개 가 공개 되어야 하므로 "비공개"를 나타내는 키워드가 필요합니다. 적절한 반의어가없는 export( unexport??) private논리적 인 선택도 있습니다. 일단 당신이 private, 그것 public의 상대로 선택하지 않는 것은 약간 미친 것입니다
  • 의 사용 export내부 모듈에 대한 가시성을 수정은 ES6 모듈과 가장 잘 추측 정렬입니다

1
추가 정보 덕분에, 나는 공개 / 개인이 회원 수준에 있다는 것에 전적으로 동의한다. 그러나 이것은 개인적인 의견이며 키워드는 키워드이며 더 많은 것을 알고 싶었습니다.
Grofit

5
나는 구현의 용이성에 대한 건방진 진술을 수정하고 사과로 +1을 제공합니다 :)
Fenton

2
나는 당신이 말하는 것에 동의하지만 "내보내기에 적합한 반의어가 없습니다"- "반입"은 반의어이며, 반출 가능한 클래스를 정의 할 때 TypeScript가 사용하는 문장에 동의하지 않습니다. 다른 파일로 가져 오기 export class User { name: string } 다른 파일 : import {User} from ""./the_file_path_to_the_user_class; nativescript 문서의 3.3 섹션을 참조하십시오 docs.nativescript.org/angular/tutorial/ng-chapter-3
Adam Diament

3
import"이 값을 내 보내지 않았습니다 "를 나타내는 데 어떻게 키워드를 적절하게 사용합니까?
Ryan Cavanaugh

5
"수출에 적합한 반의어가 없다"(내보내기 ??)-수출에 적합한 반의어는 금지되어야한다.
rsp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.