gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:02:23 33 4
gpt4 key购买 nike

我有一个自定义类型定义来扩充现有接口(interface)(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'.

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

最佳答案

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

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

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

关于Typescript 自定义类型定义在导入类上中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47977932/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com