我想id在Express的Request界面中添加一个属性.Express具有DefinitelyTyped类型定义.我已经尝试过各种方式指定合并接口,所有这些都会导致错误或无法正常工作.
我正在使用ES6样式模块导入访问Express的打字: import * as express from 'express';
我已经尝试与命名空间中的Request对象合并Express.
declare module Express {
export interface Request {
id: number;
}
}
Run Code Online (Sandbox Code Playgroud)
这无声无息.我尝试使用实际模块而不是命名空间进行合并,遵循我正在使用的新1.8编译器的说明:
import { Request } from 'express';
declare module 'express' {
interface Request {
id: number;
}
}
Run Code Online (Sandbox Code Playgroud)
这个错误是因为 Module augmentation cannot introduce new names in the top level scope.
当我打开实际express.d.ts文件时,看起来有一个module e { ... }包含所有接口的内部,declare module "express" { ... }其中包含一行export = e;.也许这是某种程度上的问题,因为命名空间嵌套?
你怎么做到这一点?
在 v1.8 之前的 TypeScript 版本中这是不允许的。
从 v1.8 开始,模块增强可用。语法与环境声明相同(如您在问题中所示) - 唯一的区别是您上面发布的内容现在应该可以工作。
模块扩充允许您扩展全局和模块范围。
要扩展全局范围,您可以使用global三个模块名称:
declare global {
interface Array<T> {
popFromTop(): T;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1834 次 |
| 最近记录: |