수출 신고형 Xyz'는 '수출 신고형 Xyz'에 비해 무엇을 의미합니까?
정의 파일에는 다음 두 가지를 모두 쓸 수 있습니다.
export declare type Abc = string;
export type Bcd = string;
그declare
여기 키워드는 아무 소용이 없죠, 그렇죠?
맞아요. declare
키워드는 실행 시 변수 또는 상수가 있을 것이라고 말해야 할 때 유용합니다.
예:예를 들어 라이브러리를 가져오려고 합니다.someExternalLib
그러나 npm에는 없습니다(스크립트 태그를 통해 수동으로 포함해야 합니다).글로벌 변수로 액세스할 수 있습니다.someExternalLib
기능이 있는.fun1
그리고.fun2
문제는 Typescript가 모른다는 것입니다. 그렇기 때문에 글로벌 선언을 통해 도움을 주어야 합니다.someExternalLib
:
declare const someExternalLib: { fun1: () => number, fun2: () => number }
이는 일반적으로 정의 파일에서 변수, 상수, 클래스, 함수를 선언하는 데 필요합니다.유형 및 인터페이스에 중복됩니다.
declare
TypeScript의 경우와 유사합니다.forward declarations
예를 들어, C++에서.
포워드 선언은 컴파일러에게 특정한 것을 알려줍니다.
- 존재한다,
- 그러나 여기서 정의되지 않았습니다(단, 선언된 경우에만 해당).
선언은 형식 선언이나 정의와 같은 모든 것이 될 수 있습니다(그러나 정의가 없는 경우).
그럼 단순한 유형일 수도 있고, 물체일 수도 있고, 함수 서명일 수도 있고, 열거일 수도 있습니다.아무거나.
C++에서 포워드 선언의 한 예는 다음과 같습니다.
int add(int x, int y);
이것은 C++에 두 개의 정수 인수를 취하고 정수를 반환하는 함수가 어딘가에 존재한다는 것을 알려주지만, 이 함수는 여기서 정의되지 않습니다(이 선언에는 구현이 없습니다!).C++와 같은 언어에서는 컴파일 시 해당 선언에 대한 올바른 구현을 가져오는 링커 및 링크 단계라고 불리는 것이 있으므로 이를 가져올 필요가 없습니다.
TypeScript에서 의미론은 크게 다르지 않지만, 작동하는 방식, 구현되는 방식은 물론 다릅니다.
선언은 C++처럼 TypeScript 컴파일러에 무엇이 선언되는지, 어떤 유형이 사용 가능한지, 어떤 속성이 사용 가능한지 등을 알려줍니다. 기본적으로 다른 방식으로 정의할 수 있는 모든 것은 물론 정의를 제외합니다. 함수 시그니처 또는 네임스페이스와 그 구성 요소(함수,변수), 그러나 구현을 정의할 수 없습니다(함수 본문 없음!).
TypeScript에 대해 주의해야 할 한 가지 주요 측면declare
선언은 다음과 같습니다.
declare type MyObject = {
doSomething: () => void,
// ...
}
그리고.
type MyObject = {
doSomething: () => void,
// ...
}
그것들이 동일하게 보일 수 있고 기능이 동일할 수 있지만, 첫 번째 버전은 컴파일러에게 선언된 유형의 객체를 정적으로 유형 검사하는 방법만 알려주지만, 자동으로 유형 정의 파일을 생성할 때 (d.ts
예를 들어 재사용 가능한 패키지(예: 패키지)의 경우 해당 정의 파일을 수동으로 작성하지 않는 한 두 번째 버전(유형도 내보내는 경우)만 작동합니다.
을 생각하다declare
TS 컴파일러에 현재 프로젝트에서 관리되지 않는 것(JS, JSON 등)이 타이핑되지 않은 타사 라이브러리의 것처럼 어떻게 보이는지 알려주는 방법입니다.당신은 당신이 가져온 JS 라이브러리가 어떻게 생겼는지, 그것이 무엇을 내보내는지 등을 컴파일러에게 알려주기 위해 그것을 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/43561980/what-does-declare-in-export-declare-type-xyz-mean-vs-export-type-xyz
'programing' 카테고리의 다른 글
데이터를 파일이 아닌 문자열로 CSV 형식으로 쓰는 방법은 무엇입니까? (0) | 2023.06.26 |
---|---|
이 컨텍스트에서는 숫자 또는 부울을 반환하는 변수 식만 허용됩니다. (0) | 2023.06.26 |
R.exe, Rcmd.exe, Rscript.exe와 Rterm.exe: 차이점은 무엇입니까? (0) | 2023.06.26 |
방화벽에서 호스트된 사이트를 제거하려면 어떻게 해야 합니까? (0) | 2023.06.26 |
모든 git 오리진 및 로컬 태그를 제거하는 방법은 무엇입니까? (0) | 2023.06.26 |