使用 ts-node 时,Typescript 的声明合并无法按预期工作

2024-05-01

对于使用的项目express-session包,我正在尝试改变session只需添加用户密钥即可实现对象。

req.session.user = 123;

来自(哪里这个问题的 https://stackoverflow.com/q/65108033/2989034接受的答案,我知道我可以使用声明合并来扩展SessionData界面,使用我自己的界面。

查看各种开源项目,例如HospitalRun 组件存储库 https://github.com/HospitalRun/components/tree/master我注意到他们有types他们的目录中tsconfig.json文件下的include像这样的部分。

  "include": [
    "src",
    "types"
  ]

我的整个tsconfig.json看起来像这样,它位于项目的根目录中。

{
    "include": [
        "types",
        "src",
    ],
    "exclude": [
        "node_modules"
    ],
    "compilerOptions": {
        "lib": [
            "esnext",
            "esnext.asynciterable"
        ],
        "baseUrl": ".",
        "skipLibCheck": true,
        "module": "commonjs",
        "esModuleInterop": true,
        "target": "es6",
        "moduleResolution": "node",
        "outDir": "build",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "allowSyntheticDefaultImports": true,
        "strict": true,
        "strictPropertyInitialization": false,
    },
}

我尝试做同样的事情,一起创建一个名为express-session.d.ts在此文件夹的根目录中(~/types/),具有以下内容:

import session from 'express-session';

declare module 'express-session' {
    interface SessionData {
        user: any;
    }
} 

但是,我不断收到的错误是这样的。

 Property 'user' does not exist on type 'Session & Partial<SessionData>'

然而,当我将这段代码添加到用于改变会话对象的代码上方时,我不再遇到问题。但这似乎不是正确的方法。

另外,当我使用tsc src/index.ts --build代替ts-node src/index.ts它也有效。

我在这里做错了什么?如何解决这个问题?我也尝试使用typeRoots,使用同一文件夹。


最新更新(2021 年 5 月 8 日)

使用以下命令运行打字稿程序时ts-node, even typeRoots在 tsconfig.json 中指定,无法识别自定义 .d.ts 并提示Property 'x类型 y` 错误不存在。

根据https://github.com/TypeStrong/ts-node/issues/1132#issuecomment-716642560 https://github.com/TypeStrong/ts-node/issues/1132#issuecomment-716642560

贡献者之一ts-node提出了多种解决方法。

这是其中之一: 指定file: true标记在tsconfig.json通知ts-node加载files, include and exclude选项来自tsconfig.json启动时

{
  "ts-node": {
    "files": true
  },
  "exclude": [...],
  "compilerOptions": {
   ...
}

旧版:(2021 年 5 月 7 日)

没有必要使用include in tsconfig.json并且路径不正确。编译器可以在目录及子目录中搜索ts文件

尝试将其删除。并重新启动 TS 服务器。

If you are using VSCode, try Cmd + Shift + P or Ctrl + Shift + P and search Restart TS server and see if the user type error still exist

{
    "exclude": [
        "node_modules"
    ],
    "compilerOptions": {
        "lib": [
            "esnext",
            "esnext.asynciterable"
        ],
        "baseUrl": ".",
        "skipLibCheck": true,
        "module": "commonjs",
        "esModuleInterop": true,
        "target": "es6",
        "moduleResolution": "node",
        "outDir": "build",
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "allowSyntheticDefaultImports": true,
        "strict": true,
        "strictPropertyInitialization": false,
    },
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ts-node 时,Typescript 的声明合并无法按预期工作 的相关文章

  • 由于预发布,Node 应用程序无法运行

    即使安装成功 我也会安装无效的软件包 顺便说一句 这个问题与答案相关 关于版本控制的问题 https stackoverflow com questions 27628153 npm versioning how does this edg
  • 将音频与视频流合并 Node.js

    我正在创建 YouTube 视频下载器并且正在使用ytdl core库 它无法下载带有音频的高质量视频 因为 youtube 将其放在另一个文件中 但我需要将其全部下载到一个文件中 我已经这样做了 app get download asyn
  • 响应式网格布局框架[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 创建 Cookie 时需要帮助

    我有一个名为yes和另一个名叫no
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • 如何以非阻塞方式在 Node.js 中搜索数组?

    我有一个数组是 4ff023908ed2842c1265d9e4 4ff0d75c8ed2842c1266099b 我必须找出以下内容是否在该数组内 4ff0d75c8ed2842c1266099b 这是我写的 Array prototyp
  • 如何记录返回的事件发射器

    如何记录所发出的事件stream返回于MyFunc 与 JSDoc MyFunc description param Object opts description return Stream description function My
  • 由于缺少会话而在 Next.js 中使用 Next-Auth 进行重定向时,如何显示 Toast 通知? [复制]

    这个问题在这里已经有答案了 例如 假设我有一个名为internal tsx 的页面 其中包含 export const getServerSideProps GetServerSideProps async ctx gt const ses
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • KeyboardEvent.keyCode 已弃用。这在实践中意味着什么?

    根据 MDN 我们绝对应该not正在使用 keyCode财产 它已被弃用 https developer mozilla org en US docs Web API KeyboardEvent keyCode https develope
  • 使用 jquery 将字符串数组转换为整数

    我正在尝试将 jquery 中的字符串数组转换为整数数组 这是我的尝试 var cdata data values split each cdata function i l l parseInt l 我认为在这种情况下你不需要使用 Jqu
  • 如何将 Browserify 与外部依赖项一起使用?

    我正在尝试慢慢地将 Browserify 引入我的网站 但我不想重写所有 js 也不希望 jquery 和其他库的重复实例与我的 Browserify 版本捆绑在一起 如果我构建将 jquery 列为外部依赖项的模块 那么如何将其指向我的全
  • 如何在网页上实现文件上传进度条?

    当用户将文件上传到我的网络应用程序时 我想显示比动画 gif 更有意义的内容 我还有哪些可能性 编辑 我正在使用 Net 但我不介意是否有人向我展示与平台无关的版本 如果您对这一切在客户端通常如何工作感兴趣 就是这样 所有解决方案都通过 J
  • 从多维无穷大数组中删除数组元素

    我想删除一个特定元素 例如 我想删除元素id 76在下面的数组中 而且 数组可以无限地组合在一起 这里的问题是我无法刷新页面 因为我使用 Vue js 进行即时操作 如果我能做到这一点 我的下一个问题可能是如何在我现在想要的地方添加一个元素
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • ES6 模板文字的延迟执行

    我正在玩新的ES6 模板文字 http tc39wiki calculist org es6 template strings 我首先想到的是String format对于 JavaScript 所以我开始实现一个原型 String pro
  • 在javascript中动态生成行?

    我是 javascript 新手 我想在按下 Tab 时动态生成行 并希望获取在动态生成的行中输入的值 以便我可以在 servlet 代码中使用这些值 这是我的html
  • 当选择下拉列表中的某些值时,取消选中复选框

    当我从下拉列表中选择某个值或用户未从下拉列表中选择任何值时 我需要取消选中复选框 我现在正在使用 Jquery 这是我现在使用的代码 但它不起作用 Script
  • Typescript:类类型的实例

    我的课程类型如下A Type class A constructor public a string type A Type new a string A 我想获取实例的类型A Type构造函数 以便我可以显式键入该函数 class A c
  • Bootstrap 3 / 显示模式不适用于 javascript 方式

    我用Modal http getbootstrap com javascript modalsBootstrap 3 0 的功能 我有这个代码 a href myNestedContent Open the modal containing

随机推荐