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

qqi*_*ihq 3 module interface typescript

我有一个自定义的类型定义扩展现有接口(快递Request如图所示这里)。内容express.d.ts

declare namespace Express {
  export interface Request {
    name: string
  }
}
Run Code Online (Sandbox Code Playgroud)

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

export class MyClass {
  first: string;
  last: string;
}
Run Code Online (Sandbox Code Playgroud)

我将界面增强更改为:

import { MyClass } from "../routes/myClass";
declare namespace Express {
  export interface Request {
    name: MyClass
  }
}
Run Code Online (Sandbox Code Playgroud)

现在访问时出现以下错误req.name

error TS2339: Property 'name' does not exist on type 'Request'.
Run Code Online (Sandbox Code Playgroud)

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

art*_*tem 5

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

要修改模块中的全局声明,您必须在全局命名空间中使用declare global引用Express

import { MyClass } from "../routes/myClass";
declare global {
  namespace Express {
    export interface Request {
      name: MyClass
    }
  }
}
Run Code Online (Sandbox Code Playgroud)