繁体   English   中英

打字稿中的声明类型

[英]Declaration types in typescript

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

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

我看到 TypeScript 对每个属性和属性都有很高的评价,我对此有疑问,因为默认情况下未设置属性“user”,我想用它来保存解码的用户会话。

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

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

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

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

  1. 我不知道它为什么有效。 我不需要该文件,但是不管它如何工作,我所做的独特之处是在 tsconfig.json 中的 typeroots 中要求它,但使用 ts-node 执行。 我不知道它是否有任何影响(实际上,Visual Studio Code 不会抛出错误,但 ts-node 会)。
  2. 我想给用户 Session 类型,所以我将 Session 导入到文件中,但现在 Visual Studio Code 告诉我它不在 User 属性中。

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

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

来源

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

问题 1:在处理整个项目的标准基于 TypeScript 的工具(例如tsc和 Visual Studio Code)中,在项目的任何文件(基于tsconfig.jsonfilesincludeexclude设置)中,像您这样的模块扩充是对项目中使用原始模块的所有文件自动生效; 无需显式引用包含扩充的文件。 但是, ts-node默认只将文件在运行时加载时传递给 TypeScript(文档)。 您可以使用--files选项让ts-node将整个项目传递给 TypeScript。 (这足以让您的模块扩充工作,但请注意,这仍然不会在运行时急切地加载所有文件。为此,您必须使用importrequire ,然后您就不再需要--files .)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM