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

问题描述 投票:1回答:1

我有一个自定义类型定义来扩充现有的接口(Express Request,如here所示)。 express.d.ts的内容:

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

工作良好。但是,我不需要将name作为字符串,而是需要将它作为自定义类MyClass。类定义如下:

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

我将界面扩充更改为:

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

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

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

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

typescript module interface
1个回答
2
投票

正如注释中提到的@unional,一旦在文件中进行顶级导入或导出,文件中的顶级作用域就会变为模块作用域,与全局作用域分开。

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

import { MyClass } from "../routes/myClass";
declare global {
  namespace Express {
    export interface Request {
      name: MyClass
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.