Почему Occured Property 'user' не существует по типу 'Request ' - PullRequest
0 голосов
/ 02 мая 2020

Я получаю следующую ошибку при запуске ts-node.

Я определил d.ts следующим образом, чтобы использовать "req.user" и применил tsconfig. json.

Path: src/@types/express/index.d.ts

import { User } from '../../model/user/user.interface';

declare global {
    namespace Express {
        interface Request {
            user?: User['employeeId'];
        }
    }
}

tsconfig. json

{
    "compilerOptions": {
        "typeRoots": [
          "./node_modules/@types",
          "./src/@types"
        ],
        "rootDir": ".",
        "module": "CommonJS",
        "strict": true,
        "outDir": "dist",
        "baseUrl": "./src",
        "paths": {
            "*": ["node_modules/@types/*", "src/@types"]
        },
        "esModuleInterop": true
    },
    "include": ["src/**/*.ts"]
}

контроллер

Path: src/api/posts/controller.ts

export const get = (req: Request, res: Response) => {
  ...
  const { user } = req;
  -> occrud Error
};

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 12 мая 2020
{
    "compilerOptions": {
        "rootDir": "./src",
        "module": "CommonJS",
        "strict": true,
        "outDir": "./dist",
        "baseUrl": "./node_modules",
        "paths": {
            "*": ["./@types/*","./*", "../src/@types"]
        },
        "esModuleInterop": false,
        "types": ["node", "express"]
    },
    "include": ["src/**/*.ts"]
}

давайте npm -D install @types/node @types/express

теперь давайте создадим контроллер класса

import { Request, Response, NextFunction } from "express";


export type EndPointResponse = Promise<Response>;
export class ListController {

    public constructor () {
        this.getAll = this.getAll.bind(this);
        this.getById = this.getById.bind(this);
    }

    public async getAll (req: Request, res: Response, next: NextFunction): EndPointResponse {

    }
    public async getById (req: Request, res: Response, next: NextFunction): EndPointResponse {

}

здесь у вас есть полное объяснение https://medium.com/@enetoOlveda / use-sequelize-and-typescript -как-а-про-с-из-The-унаследованных-декораторы-fbaabed09472

0 голосов
/ 12 мая 2020

Проблема в том, что ts-node не принимает расширения вашего типа, но tsc может. В соответствующем выпуске GitHub есть более подробная информация, но TL; DR заключается в том, что вам необходимо указать типы клиентов до того, как node_modules/@types ie:

"typeRoots": [
  "./src/@types",
  "./node_modules/@types"
]

paths также не нужно, так что вы, вероятно, можете удалить это (в любом случае это неправильно).

...