当前位置: 首页 > 知识库问答 >
问题:

导入类上的Typescript自定义类型定义中断

严心水
2023-03-14

我有一个自定义类型定义来扩充现有接口(此处显示的ExpressRequest)。express.d.ts的内容:

declare namespace Express {
  export interface Request {
    name: string
  }
}

工作正常。但是我现在需要它是一个自定义类MyClass,而不是name作为一个字符串。类定义如下所示:

export class MyClass {
  first: string;
  last: string;
}

我将界面增强更改为:

import { MyClass } from "../routes/myClass";
declare namespace Express {
  export interface Request {
    name: MyClass
  }
}

现在,我在访问< code>req.name时出现以下错误:

error TS2339: Property 'name' does not exist on type 'Request'.

我发现,由于添加了导入语句,我的 express.d.ts 实际上变成了一个“模块”。不过,我不清楚如何克服我的问题。

共有1个答案

鲍驰
2023-03-14

正如@unional在评论中提到的,一旦您在文件中进行了顶级导入或导出,文件中的顶级范围就会成为模块范围,与全局范围分开。

修改模块中的全局声明,必须使用声明全局来引用全局命名空间中的 Express

import { MyClass } from "../routes/myClass";
declare global {
  namespace Express {
    export interface Request {
      name: MyClass
    }
  }
}
 类似资料:
  • 在我的项目中,我希望有一个包含所有类型脚本定义的文件,如下所示: type_defs.tsx: 问题是,当我尝试导出typedefs时,如下所示: 我得到了错误: 正如我在网络中发现的那样,只能对typedef文件进行默认导出,这意味着我必须为每个类型定义准备一个文件,这绝对是荒谬的! 在我看来,不允许typedefs具有多个非默认导出的约束完全是无稽之谈,并且使编码变得多余且难以重用。拥有一个包

  • 定义一个类型 条件1:变量类型是一个字符串。 条件2:变量值不是 get "typescript": "~5.2.2"

  • 问题内容: 我是Java的新手,但我一直在网上寻找解决方案,但似乎都没有用。请帮我。 我有两个文件。其中之一是包含主要功能的java文件。在里面: 使用该命令,我想创建一个新对象,该对象是一个名为的单独文件中的类。但是Java无法识别VaporVisitor是什么,大概是因为它不知道存在(它在同一目录中)。我试图使它们成为同一程序包的一部分,放入不同的程序包中并导入…,但所有这些都失败了。谁能给我

  • Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。

  • 存在多种方法来重新定义现有类型的行为以及提供新的类型。 重写类型编译 一个常见的需求是强制更改类型的“字符串”版本,即在create table语句或其他SQL函数(如cast)中呈现的版本。例如,应用程序可能希望强制呈现 BINARY 适用于除一个平台外的所有平台 BLOB 待渲染。在本例中,使用现有的泛型类型 LargeBinary ,是大多数用例的首选。但是为了更准确地控制类型,每个方言的编

  • 1. 包含头文件 #import <AdHubSDK/AdHubSDK.h> 2. AdHubCustomView 的创建和初始化 在需要导入广告的ViewController头文件中导入头文件并声明实例以及声明代理 #import <AdHubSDK/AdHubSDK.h> @interface AdHubCustomViewController ()<AdHubCustomViewDele

  • 问题内容: 如何导入在其他文件中编写的类?我所有的课程都在同一个程序包下。 问题答案: 如果所有类都在同一个程序包中,则无需导入它们。 只需像这样实例化该对象:

  • 我试图在我的主文件。 entry.ts位于src/js/entry, ts,vue的类型定义位于src/js/lib/baul/vue/type/index.d.ts 编译此文件时,输出如下。顺便说一句,typescript的目标是es6和es6模块。 JQuery工作正常(看起来像),所以我用导入替换了对vue类型定义的引用。 它编译得很好,下面是输出: 问题是没有删除类型定义的import语句