扩展打字稿接口

2023-11-26

在 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(使用前将#替换为@)

扩展打字稿接口 的相关文章

随机推荐