付延伟*_*付延伟 4 express typescript
import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
declare module 'kvl' {
export = kvl;
}
declare const kvl: {
ValidationDone:(param:(error: any, response: ExpressResponse) => void) => void;
}
Run Code Online (Sandbox Code Playgroud)
模块扩充中不允许导出和导出分配。
我是在 .d.ts 中声明的?我不能这样用吗?
模块增强:
Typescript 将此称为模块扩充:您正在使用现有模块并向其添加新定义。模块扩充有自己的语法:
这在这里描述:https : //github.com/Microsoft/TypeScript-Handbook/blob/fa9e2be1024014fe923d44b1b69d315e8347e444/pages/Declaration%20Merging.md#module-augmentation
按照文档,您的代码变为:
// file1.ts
import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
// module name must be "express"
declare module 'express' {
// this can't be an export
const kvl : {
ValidationDone:(param:(error: any, response: ExpressResponse) => void) => void;
}
}
Run Code Online (Sandbox Code Playgroud)
现在您已经扩充了express模块并且可以像这样使用它:
// file2.ts
import {kvl} from "express";
// ...
Run Code Online (Sandbox Code Playgroud)
模块化声明文件:
如果您不想将新类型注入到 express 模块中,您可以为新模块使用声明文件。有多种类型,可以在这里找到一个很好的概述:https : //www.typescriptlang.org/docs/handbook/declaration-files/library-structures.html
基本上,您必须检查代码的使用方式,然后调整您的声明。在您的情况下,您似乎想kvl作为模块导入。所以你可以在这个示例文件上定位自己:https : //www.typescriptlang.org/docs/handbook/declaration-files/templates/module-d-ts.html
我已将您的代码更改为适当的语法。顺便说一句,这仅在 .d.ts 文件中是正确的:
//kvl.d.ts
import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
export as namespace kvl;
export const kvl : {
ValidationDone:(param:(error: any, response: ExpressResponse) => void) => void;
};
Run Code Online (Sandbox Code Playgroud)
实现一个模块:
如果kvl是您自己的代码,则您不必使用声明文件。Typescript 可以分析你的模块。将生成具有正确类型的 kvl 常量的模块定义可能如下所示:
// kvl.ts
import { Request as ExpressRequest, Response as ExpressResponse } from 'express';
export const kvl : {
ValidationDone:(param:(error: any, response: ExpressResponse) => void) => void;
} = {ValidationDone: function(param){}};
Run Code Online (Sandbox Code Playgroud)
请注意,模块自动将其文件名作为模块名。因此,上面的代码应该在一个名为 kvl.ts 的文件中。
| 归档时间: |
|
| 查看次数: |
4176 次 |
| 最近记录: |