Typescript는 빌드 할 d.ts 파일을 복사하지 않습니다.
그래서 혼란 스러울 수도 있지만 declaration:truetsconfig.json에 추가 하면 tsc *.d.ts가 트랜스 d.ts파일 된 코드와 함께 파일을 복사하도록 할 수 있다고 생각했습니다 .
예 :
- src
- lib
- types.d.ts
- foo.ts
tsc의 결과는 다음과 같을 것으로 예상됩니다.
- build
- lib
- types.d.ts
- foo.js
- foo.d.ts
그러나 types.d.ts내 빌드 디렉토리에 복사 되지 않는 것 같습니다 .
typescript는 .d.ts파일 복사 메커니즘을 제공하지 않습니까? 아니면 어딘가에 잘못된 구성이 있습니까? (이 시점에서 많은 다른 구성을 시도했지만 아무것도 작동하지 않는 것 같습니다)
답변
당신은 맞다 - declaration:true의미가 각각의 주어진에만 .ts파일이 tsc해당 생성하고 복사 .d.ts받는 출력 파일 build(뿐만 아니라 디렉토리 .js및 .map해당되는 경우). 따라서 tsc사용자 정의 types.d.ts파일을 출력 디렉토리에 복사하지 않습니다 .
기본적으로 .d.ts파일은 컴파일러가 유형 검사를 수행하는 데 사용할 수없는 입력으로 간주됩니다. 어떤 출력 생성에도 사용되지 않습니다. 즉, build. 더 읽을 수 있습니다https://github.com/Microsoft/TypeScript/issues/5112 관리자의 관점에 대해 :
사용하는 .d.ts 파일은 빌드 시스템에 대한 입력이지만 출력은 아닙니다. .d.ts에서 일부 유형을 사용하는 것이 완벽하게 합리적이지만 출력에서 이러한 유형을 사용하지 않도록하므로 빌드 결과와 함께 입력 .d.ts를 배포 할 이유가 없습니다. [...] 필요한 곳에 관련 .d.ts 파일을 복사하기 위해 빌드 도구의 빌드 후 단계를 원하는 것처럼 들립니다.
.d.ts 파일은 컴파일러가 파일을 건드 리거나 이동하거나 재생성하지 않는 "참조"로 간주됩니다. .d.ts 파일을 쉽게 생각할 수있는 방법은 .js 파일과 함께 사용하는 것입니다. .js 파일을 복사하는 경우 일치하는 .d.ts를 복사해야합니다.
솔루션 # 1 : 수동 빌드 단계를 통해 d.ts 파일 복사
가능한 해결책은 빌드 단계에서 수동으로 필요한 모든 .d.ts파일 을 복사 types.d.ts하는 것입니다. 구체적인 도구는 선호도이며 프로젝트 및 빌드 유형, OS에 따라 다릅니다. 이 도구는 아래의 디렉토리 구조를 유지해야 src파일을 복사 할 때를 build, 그래서 import형 참조 여전히 일을. 몇 가지를 예로 들면 :https://serverfault.com/questions/180853/how-to-copy-file-preserving-directory-path-in-linux(쉘) rsync, robocopy또는 플랫폼 독립적 NPM 패키지 등https://www.npmjs.com/package/copyfiles:
"scripts": {
"copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" build"
}
솔루션 # 2 : d.ts 파일을 .ts 확장자로 변경
.d.ts파일을 .ts확장자로 바꾸 거나 유형을 기존 .ts파일 로 다시 통합 하므로 tsc출력에서 선언을 내보내는 작업을 처리합니다. 약간의 단점 : 유형과 구현 코드간에 컴파일러 강제 분리 d.ts가 없습니다 ( 파일에 코드를 포함 할 수 없음). 큰 장점은 추가 빌드 단계가 필요하지 않다는 것입니다.
내 생각에 후자는 npm 패키지와 같은 공용 API를 생성하는 가장 쉬운 방법이지만 .d.ts파일은 내부적으로 사용되는 공유 유형 선언의 후보를 만들 수 있습니다.
희망, 도움이됩니다.