ts-node는 tsc가 프로젝트를 정상적으로 컴파일하는 동안 d.ts 파일을 무시합니다.
TypeScript 프로젝트를 성공적으로 컴파일한 후 VS Code의 디버깅모드로 실행하려고 했습니다.ts-node
문제는...ts-node
찾을 수 없다d.ts
작성한 파일(중)tsc
문제가 없습니다).
프로젝트 구조:
/
conf/
dist/
src/
types/
package.json
tsconfig.json
tsconfig.json
관련 엔트리는 다음과 같습니다.
{
"compilerOptions": {
"target": "es2017",
"module": "commonjs",
// "lib": [],
"sourceMap": true,
"outDir": "dist",
"rootDir": "src",
"moduleResolution": "node",
"baseUrl": ".",
"paths": {
"*": [
"node_modules/*",
"src/types/*"
]
},
// "rootDirs": [],
// "typeRoots": [],
// "types": [],
},
"include": [
"src/**/*"
]
}
정의 파일ts-node
찾을 수 없다src/types/global.d.ts
:
import { App } from '../App';
declare global {
namespace NodeJS {
interface Global {
app: App;
}
}
}
그래서, 그걸 실행하려고 하는 건ts-node
알겠습니다.
TSError: ⨯ Unable to compile TypeScript:
src/boot.ts(15,59): error TS2339: Property 'app' does not exist on type 'Global'.
글로벌하게 해결하는 방법나는 그것을 발견했다./// <reference path="./types/global.d.ts" />
하지만 모든 파일에서 이 작업을 반복해야 합니다.global.app
.
내 TypeScript 버전은 3.0.1입니다.
저도 비슷한 문제가 있었는데 추가하지 못했어요.--files
왜냐하면 나는 달리기 때문이다.ts-node
를 통해 모듈을 등록함으로써mocha
(즉,mocha -r ts-node/register ...
).
이 문제를 해결하려면files
및 ats-node
로 나누다.tsconfig.json
다음과 같습니다.
// tsconfig.json
{
"ts-node": {
"files": true
},
"files": [
"src/index.ts",
"src/global.d.ts"
],
"compilerOptions":{
//...
}
}
7.0.0의 ts-node부터는 파일을 로드하지 않습니다.tsconfig.json
를 클릭합니다.대신, 특정할 필요가 있습니다.--files
이것처럼.
ts-node --files src/boot.ts
TLDR
더하다"ts-node": { "files": true },
에tsconfig.json
위해서ts-node-dev
예상대로 작동하다
설명:
사용하고 있었습니다.ts-node-dev
에package.json
예를 들어 다음과 같습니다.
"scripts": {
"build": "tsc",
...
"dev": "ts-node-dev src/index.ts"
},
npm run build
정상적으로 동작하고 있었습니다만,npm run dev
실패했습니다. 내 유형 정의 파일이 다음 위치에 있습니다.src/types/*
.
다음 항목을 추가하자 정상적으로 작동하기 시작했습니다.tsconfig.json
{
"ts-node": { "files": true }, // add this
"compilerOptions": {
...
}
}
내가 그걸 고친 방법은 이렇다.개발 스크립트에 "nodemon --exec ts-node --files src/app.ts"를 추가합니다.
"scripts": {
"start": "node dist/app.js",
"dev": "nodemon --exec ts-node --files src/app.ts",
"build": "tsc -p",
"test": "echo \"Error: no test specified\" && exit 1"
},
저는 이 문제에 대해 많은 시간을 들여서 type에 제 타이핑 폴더 추가, 구조 타이핑/모듈/index.d.ts를 가진 타이핑 폴더 생성 등 거의 모든 것을 시도했습니다만, 아무것도 해결되지 않았기 때문에, 지금 위의 답변이 무엇을 의미하는지 알게 되었습니다.
새로운 버전의 ts-node를 사용하여 프로젝트 스크립트에 맞게 변경했습니다.
ts-node@6: ts-node src/index.ts
ts-node@7: ts-node --files src/index
따라서 스크립트는 다음과 같이 변경됩니다.
"scripts": {
"dev": "nodemon --exec ts-node --files src/index",
}
위와 같이 실행하면서 당신의 컴파일 시간이 많이 늘어났지만, 저는 더 이상 시간을 할애할 수 없어서 위의 내용을 고수하고 있습니다.
또, https://github.com/TypeStrong/ts-node#missing-types 를 참조할 수도 있습니다.
다른 솔루션은 모두 좋지만 ts-node 권장 메서드(ts-node에 따라 마지막 수단인 --files 사용 제외)는 https://www.npmjs.com/package/ts-node#missing-types에서 찾을 수 있습니다.
사용 사례와 선호도에 따라 3가지 유형을 권장합니다.
- tsconfig.json에서 compiler Options.typeRoots 사용
글로벌 정의에 대해서는 typeRoots 컴파일러 옵션을 사용할 수 있습니다.이를 위해서는 유형 정의를 유형 패키지로 구성해야 합니다(느슨한 TypeScript 정의 파일이 아님).작동 방식에 대한 자세한 내용은 TypeScript 핸드북을 참조하십시오.
{
"compilerOptions": {
"typeRoots" : ["./node_modules/@types", "./typings"]
}
}
- tsconfig.json 경로 사용
모듈 정의에는 경로를 사용할 수 있습니다.
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"custom-module-type": ["types/custom-module-type"]
}
}
}
- 트리플 슬래시 지시어 사용
또 다른 옵션은 트리플 슬래시 디렉티브입니다.이는 컴파일러 옵션을 변경하거나 type Roots에 대한 유형 정의를 구성하지 않는 경우에 유용합니다.다음은 프로젝트 내 상대 경로로서의 트리플 슬래시 지시어의 예입니다.
/// <reference path="./types/lib_greeter" />
import {Greeter} from "lib_greeter"
const g = new Greeter();
g.sayHello();
언급URL : https://stackoverflow.com/questions/51610583/ts-node-ignores-d-ts-files-while-tsc-successfully-compiles-the-project
'programing' 카테고리의 다른 글
WordPress 및 Ajax - 쇼트코드 콘텐츠 새로고침 (0) | 2023.04.05 |
---|---|
mongoose에서 여러 문서를 업데이트하려면 어떻게 해야 하나요? (0) | 2023.04.05 |
HOC와 컴포넌트 랩의 차이점 (0) | 2023.04.05 |
고속 XML 잭슨:큰따옴표 삭제 (0) | 2023.04.05 |
확인 이메일의 ASP.NET 핵심 ID 토큰이 잘못되었습니다. (0) | 2023.04.05 |