Типы объявлений в машинописи - PullRequest
0 голосов
/ 11 сентября 2018

Я делал веб-страницу в течение последних двух дней, и я решил использовать TypeScript.

Я выбрал Express.js в качестве веб-сервера, и я использовал Express в прошлом, так что я знаю,о Express.

Я видел, что TypeScript смотрит высоко на каждое свойство и какие свойства имеют, и у меня есть проблема с этим, потому что свойство "пользователь" не установлено по умолчанию, и я хочу использовать его для сохранениярасшифрованный сеанс пользователя.

После поиска в Интернете я нашел следующее:

declare module "express" { // declare module "express-serve-static-core"
  export interface Request {
    user: any
  }
}

из этого сообщения: Ошибка машинописного текста: свойство 'user' не существует для типа 'Request'

Я вставил это в файл, и он хорошо работает, но у меня есть две проблемы:

  1. Я не знаю, почему это работает.Мне не нужен файл, но, тем не менее, это работает, единственное, что я сделал, - это потребую его в typeroots внутри tsconfig.json, но с помощью ts-node.Я не знаю, имеет ли он какой-либо эффект (на самом деле, код Visual Studio не выдает ошибку, а ts-node делает).
  2. Я хочу дать пользователю тип Session, поэтому я импортировал Session вфайл, но теперь Visual Studio Code сообщает мне, что отсутствует в свойстве User.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вопрос 1: В стандартных инструментах на основе TypeScript, таких как tsc и Visual Studio Code, которые обрабатывают весь проект, расширение модуля, подобное вашему, в любом файле вашего проекта (на основе * 1004 Настройки *, include и exclude в tsconfig.json) автоматически действуют для всех файлов в вашем проекте, которые используют оригинальный модуль; нет необходимости явно ссылаться на файл, содержащий расширение. Однако ts-node по умолчанию передает только файлы в TypeScript, поскольку они загружаются во время выполнения ( документация ). Вы можете использовать опцию --files, чтобы получить ts-node для передачи всего проекта в TypeScript. (Этого будет достаточно для работы вашего модуля, хотя учтите, что это все равно не загружает все файлы во время выполнения. Для этого вам придется использовать import или require, и тогда вам больше не понадобится --files.)

0 голосов
/ 12 сентября 2018

module - глобальное пространство имен для типов. Документы .

Пространство имен - это способ логически сгруппировать связанный код. Это встроенный в TypeScript в отличие от JavaScript, куда идут объявления переменных в глобальную область и если несколько файлов JavaScript используются в В этом же проекте будет возможность перезаписи или неправильного толкования. одни и те же переменные, которые приведут к «загрязнению глобального пространства имен проблема »в JavaScript.

Источник

Лучше npm install --save @types/express, так как у него лучшее покрытие типов.

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