Не удалось скомпилировать Typescript даже после изменения пространства имен - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь расширить тип User внутри express.js, добавив файл объявления express.d.ts в мой проект. Файл объявления удаляет извилистые строки ошибок внутри кода VS, но Typescript не будет компилироваться. Я получаю ошибки, такие как TS2339: Property 'id' does not exist on type 'User', когда пытаюсь скомпилировать, даже если intellisense распознает объявления.

express .d.ts

import { Channel, User as DbUser } from '../entities'

declare global {
    namespace Express {
        interface Request {
            channel?: Channel
        }

        //User already exists on Request and is of type {}
        interface User extends DbUser {

        }
    }
}

tsconfig. json

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "ES2017",
        "pretty": true,
        "strict": true,
        "alwaysStrict": true,
        "noImplicitThis": false,
        "noUnusedLocals": true,
        "strictNullChecks": false,
        "noUnusedParameters": false,
        "noFallthroughCasesInSwitch": true,
        "baseUrl": ".",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "esModuleInterop": true,
        "lib": [ "ESNext" ]
    }
}

пакет. json

{
    "dependencies": {
        // ...brevity
        "express": "^4.17.1",
        "ts-loader": "^5.4.5",
        "ts-node": "^8.6.2",
        "typescript": "^3.7.5"
    },
    "devDependencies": {
        // ...brevity
        "@types/express": "^4.17.2",
        "@types/express-serve-static-core": "^4.17.2",
    }
} 

ошибка компиляции TSError : ⨯ Невозможно скомпилировать TypeScript: src / middleware / authorize.ts (8,34): ошибка TS2339: Свойство 'session' не существует для типа 'Request'. src / middleware / authorize.ts (10,35): ошибка TS2339: свойство 'badges' не существует для типа 'User'. src / middleware / authorize.ts (25,34): ошибка TS2339: свойство 'сеанс' не существует для типа 'Запрос'. src / middleware / authorize.ts (27,35): ошибка TS2339: свойство 'badges' не существует в типе 'User'. src / middleware / authorize.ts (42,34): ошибка TS2339: свойство 'сеанс' не существует для типа 'Запрос'. src / middleware / authorize.ts (44,35): ошибка TS2339: свойство 'badges' не существует для типа 'User'.

1 Ответ

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

?‍? Вы можете попробовать этот код ниже, чтобы объявить свой собственный express интерфейс: ?

import { Channel, User as DbUser } from '../entities'

declare module 'express' {
  interface Request {
    channel?: Channel
  }

  interface User extends DbUser {
  }
}

Я пробовал этот код выше, и это работает нормально.

Надеюсь, это поможет вам ?.

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