JS / Docker - свойство user не существует для типа Session & Partial ‹SessionData›

Я пытаюсь добавить express-session в свое приложение Node.js, работающее под Docker.

Прочитал много постов:

Экспресс-сеанс: свойство signin не существует по типу «Сессия и частичная ‹SessionData›». (2339) https://github.com/DefinitiTyped/DefinitiTyped/issues/49941 https://github.com/DefinitiTyped/DefinitiTyped/issues/46861

Я пробовал объединить декларации свойства Session, вот как выглядит мой tsconfig.json:

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

В моей src/types папке есть index.d.ts файл:

declare module 'express-session' {
 interface Session {
    user: string;
  }
}

Но когда я запускаю свой проект с помощью команды docker-compose up, я получаю следующую ошибку:

/app/node_modules/ts-node/src/index.ts:421
     return new TSError(diagnosticText, diagnosticCodes)
            ^
 TSError: ⨯ Unable to compile TypeScript:
 src/routes/auth.ts(26,17): error TS2339: Property 'user' does not exist on type 'Session & Partial<SessionData>'.
 
     at createTSError (/app/node_modules/ts-node/src/index.ts:421:12

Я не думаю, что это проблема Docker, потому что это происходит во время загрузки приложения Node.js. Кто-нибудь знает, как это можно решить?


person Karen    schedule 05.01.2021    source источник


Ответы (2)


Вам следует расширить SessionData. интерфейс, НЕ Session. В index.d.ts файле @types/express-session отсутствует Session интерфейс.

declare module 'express-session' {
  interface SessionData {
    user: string;
  }
}
person slideshowp2    schedule 13.01.2021
comment
У меня такая же проблема, и я пробовал это, но ts-node по-прежнему выдает ошибку. tsc и ts-lint принимают объявление, но по какой-то причине ts-node нет. - person MoSheikh; 22.01.2021

В дополнение к предыдущему ответу о том, что вам нужно расширить интерфейс SessionData, вы можете использовать флаг --files для ts-node. Описано в этом ответе сообщении. Прямо сейчас кажется, что ts-node не берет ваш tsconfig.json.

person Max    schedule 16.02.2021