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.

Povezani članci