typescript - ts-node zanemaruje d.ts datoteke dok tsc uspješno kompajlira projekt
Nakon što sam uspješno kompajlirao svoj TypeScript projekt, namjeravao sam ga pokrenuti u VS Code načinu za otklanjanje pogrešaka koristeći ts-node. Problem je što ts-node ne može pronaći d.ts datoteke koje sam stvorio (dok tsc s tim nema problema).
Struktura projekta je:
/
conf/
dist/
src/
types/
package.json
tsconfig.json
Relevantni unosi u tsconfig.json su:
{
"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/**/*"
]
}
Datoteku definicije ts-node ne može pronaći je src/types/global.d.ts:
import { App } from '../App';
declare global {
namespace NodeJS {
interface Global {
app: App;
}
}
}
Dakle, pokušavajući to pokrenuti s ts-node vidim:
TSError: ⨯ Unable to compile TypeScript:
src/boot.ts(15,59): error TS2339: Property 'app' does not exist on type 'Global'.
Kako to riješiti globalno? Otkrio/la sam da /// <reference path="./types/global.d.ts" /> rješava problem, ali bih ga morao/morala ponavljati u svakoj datoteci koja koristi global.app.
Moja verzija TypeScripta je 3.0.1
Odgovor #1
Imao sam sličan problem, ali nisam mogao dodati --files, jer pokrećem ts-node registriranjem modula kroz mocha (tj. mocha -r ts-node/register ...).
Mogao bih to riješiti dodavanjem odjeljka files i ts-node u tsconfig.json ovako:
// tsconfig.json
{
"ts-node": {
"files": true
},
"files": [
"src/index.ts",
"src/global.d.ts"
],
"compilerOptions":{
//...
}
}
Odgovor #2
Počevši od ts-node verzije 7.0.0, ne učitava datoteke iz tsconfig.json pri pokretanju. Umjesto toga, trebali biste specificirati --files ovako
ts-node --files src/boot.ts
Odgovor #3
TLDR
Dodajte "ts-node": { "files": true }, u tsconfig.json da ts-node-dev radi kako se očekuje
objašnjenje:
Koristio sam ts-node-dev u package.json ovako:
"scripts": {
"build": "tsc",
...
"dev": "ts-node-dev src/index.ts"
},
npm run build je radio bez problema, ali npm run dev je nije uspijevao, Moje datoteke s definicijama tipova su u src/types/*.
Počelo je ispravno raditi nakon što sam dodao sljedeće u svoj tsconfig.json
{
"ts-node": { "files": true }, // add this
"compilerOptions": {
...
}
}
Odgovor #4
Evo kako sam to popravio. Dodajte "nodemon --exec ts-node --files src/app.ts" u svoj dev script.
"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"
},
Odgovor #5
Potrošio sam puno previše vremena na ovaj problem, probao gotovo sve, poput dodavanja mog direktorija typings u typeRoots, stvaranja direktorija typing s strukturom typings/module/index.d.ts, ali ništa nije uspjelo, pa sam sada shvatio što je gore navedeni odgovor značio
S novom verzijom ts-node promijenio sam skripte za svoj projekt:
ts-node@6: ts-node src/index.ts
ts-node@7: ts-node --files src/index
Dakle, vaš će se skript promijeniti u nešto slično dolje
"scripts": {
"dev": "nodemon --exec ts-node --files src/index",
}
S gore navedenim u akciji vaše vrijeme kompilacije znatno se povećava, ali nisam mogao provesti više vremena na tome, pa se držim gore navedenog.
Također biste možda htjeli posjetiti https://github.com/TypeStrong/ts-node#missing-types.
