首页 > 解决方案 > 打字稿中的声明类型

问题描述

这两天我一直在做一个网页,我选择使用 TypeScript。

我选择 Express.js 作为 Web 服务器,过去我使用过 Express,所以我了解 Express。

我看到 TypeScript 非常看重每个属性以及哪些属性具有哪些属性,我对此有疑问,因为默认情况下未设置属性“user”,我想使用它来保存解码的用户会话。

在网上搜索后,我发现了这个:

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

来自这篇文章:Typescript 错误:“请求”类型上不存在属性“用户”

我将它粘贴到一个文件中,它运行良好,但我有两个问题:

  1. 我不知道为什么它有效。我不需要该文件,但是它可以工作,我所做的独特之处在于它在 tsconfig.json 内的 typeroots 中需要它,但使用 ts-node 执行。不知道有没有什么效果(其实Visual Studio Code不会报错但是ts-node会报错)。
  2. 我想给用户 Session 类型,所以我将 Session 导入到文件中,但现在 Visual Studio Code 告诉我这不在 User 属性中。

标签: typescriptexpress

解决方案


module- 是类型的全局命名空间。文档

命名空间是一种对相关代码进行逻辑分组的方式。这是内置在 TypeScript 中的,与 JavaScript 中的变量声明进入全局范围不同,如果在同一个项目中使用多个 JavaScript 文件,则可能会覆盖或误解相同的变量,这将导致“全局命名空间污染问题” JavaScript。

资源

更好,npm install --save @types/express因为它具有更好的类型覆盖率。


推荐阅读