打字稿中的声明类型

时间:2018-09-11 20:46:31

标签: typescript express

过去两天我一直在制作网页,我选择使用TypeScript。

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

我看到TypeScript高度重视每个属性以及具有哪些属性,这是有问题的,因为默认情况下未设置属性“ user”,并且我想使用它来保存解码的用户会话。

在线搜索后,我发现了这一点

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

此帖子:Typescript Error: Property 'user' does not exist on type 'Request'

我将其粘贴到文件中,并且效果很好,但是有两个问题:

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

2 个答案:

答案 0 :(得分:1)

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

  

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

Docs

npm install --save @types/express最好具有更好的类型覆盖率。

答案 1 :(得分:0)

问题1:在处理整个项目的基于标准TypeScript的工具中,例如tsc和Visual Studio Code,在项目的任何文件中(例如,基于files中的includeexcludetsconfig.json设置)对于使用原始模块的项目中的所有文件自动生效;无需显式引用包含扩充的文件。但是,ts-node默认仅将文件传递给TypeScript,因为它们是在运行时加载的(documentation)。您可以使用--files选项来获取ts-node,以将整个项目传递给TypeScript。 (这足以使您的模块增强工作,但请注意,这仍然不能在运行时急切地 load 所有文件。为此,您必须使用import或{{ 1}},那么您就不再需要require。)