ts-node не принимает файлы d.ts, но компиляция ts c работает нормально - PullRequest
1 голос
/ 20 января 2020

Я использую машинопись с express, пытаюсь расширить express 'объект запроса.

Вот мой server.ts:

import express, { Request, Response } from "express";
const app = express();
app.use(function(req: Request, res: Response, next) {
    req.testVal = 200;
});

Вот мои расширения. d.ts:

declare namespace Express {
    export interface Request {
        testVal: number;
    }
}

Я занимаюсь разработкой с использованием VSCode. Среда IDE не выдает мне никаких предупреждений.

Компиляция с tsc также прекрасно работает.

Однако, когда я запускаю это с ts-node, я получаю сообщение об ошибке:

src/server.ts:19:9 - error TS2339: Property 'testVal' does not exist on type 'Request<ParamsDictionary>'.

19     req.testVal = 200;
           ~~~~~~~

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

У меня было это в одном из моих проектов. Мое решение состояло в том, чтобы передать флаг --files в ts-node:

ts-node --files server.ts

См. документы , где написано:

Если вы должны использовать файлы, включить или исключить, включить флаги --files или установить TS_NODE_FILES = true

0 голосов
/ 20 января 2020

Чтобы объявить testVal, вы можете использовать следующий код:

Опция 1:

declare global {
  namespace Express {
    interface Request {
      testVal : number
    }
  }
}

Опция 2:

declare module 'express' {
  interface Request {
    testVal : number
  }
}

Надеюсь, это работа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...