在 TypeScript 中扩展 Express.Request 接口时,我遇到了这个问题,我想使用外部库定义,但无法导入外部库,因为它会导致错误 ->
错误:(4, 28) TS1147:内部模块中的导入声明无法引用外部模块。
编辑:这是一个 .d.ts 文件
/// <reference path="../typings/express/express.d.ts" />
declare module Express {
import bunyan = require('bunyan'); <-- results in error
export interface Request {
_id: string; <-- this works
log: bunyan.Logger; <-- Here I want to define that it is bunyan.Logger instance;
}
}
尝试引用bunyan.d.ts(https://github.com/borisyankov/DefinitelyTyped/blob/master/bunyan/bunyan.d.ts)
也会导致问题,因为 Bunyan 模块被导出为字符串
declare module "bunyan" {
...
}
因此,尝试从参考中使用它会导致找不到。
/// <reference path="../typings/express/express.d.ts" />
/// <reference path="../typings/bunyan/bunyan.d.ts" />
declare module Express {
export interface Request {
_id: string;
log: bunyan.Logger; <- Error:(8, 18) TS2304: Cannot find name 'bunyan'.
}
}
太长;博士;如何使用外部模块定义扩展接口定义。
我认为当require
是必要的,但您可以使用扩展现有接口extends
关键词。
将导入语句移到模块之外,导出模块并扩展现有接口:
import bunyan = require('bunyan');
import express = require('express');
export declare module ExtendedExpress {
export interface Request extends express.Express.Request {
_id: string;
log: bunyan.Logger;
}
}
然后你必须在你想要使用它的地方导入这个模块。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)