Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Interface 扩展类型脚本接口_Interface_Typescript - Fatal编程技术网

Interface 扩展类型脚本接口

Interface 扩展类型脚本接口,interface,typescript,Interface,Typescript,在扩展TypeScript中的Express.Request接口时,我遇到了这样一个问题:我想使用外部库定义,但无法导入外部库,因为它会导致错误-> 错误:(4,28)TS1147:内部模块中的导入声明无法引用外部模块 编辑:它是一个.d.ts文件 /// <reference path="../typings/express/express.d.ts" /> declare module Express { import bunyan = require('bunyan'

在扩展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;
    }
}
因此,试图从引用中使用它将导致找不到

/// <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'.
    }
}
//
/// 
声明模块Express{
导出接口请求{
_id:字符串;

log:bunyan.Logger;内部和外部模块的引用将在当前alpha版本的v1.5中得到改进()

同时,您可以通过以下方式导入
bunyan
模块:

var bunyan = require('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;
    }
}

然后您必须将此模块导入到您想要使用它的位置。

为什么
声明模块快车中声明
?@Tarh错误:(4,1)TS1046:A.d.ts文件中的顶级声明需要一个“declare”修饰符。好的。
require
误导了我,我认为它是一个
.ts
文件。建议:如果外部模块
bunyan
存在一个文件
.ts
,你可以用
//@Tarh更新的问题来引用它。在declare函数导致所有扩展都丢失。(失败就好像根本没有引用一样)错误:(71,9)TS2339:类型“Request”上不存在属性“\u id”。是的,我可以通过使用其他名称创建新接口来扩展此方法。这不是我想要的->express模块具有使用请求接口的内部RequestHandler接口。通过创建新接口,我必须导入并定义参数ER是新界面的一部分,而不是旧界面-非常麻烦。然而,扩展旧界面会自动为我提供这些信息。@如果你真的想做你想做的事情,那么我认为你必须直接编辑原始的
express.d.ts
。有一些人经常使用
typescript
标记,他们更喜欢这方面的知识比我多,所以他们可能会给出更明确的答案。错误:(4,16)TS1039:环境上下文中不允许使用初始值设定项。
import bunyan = require('bunyan');
import express = require('express');

export declare module ExtendedExpress {
    export interface Request extends express.Express.Request {
        _id: string;
        log: bunyan.Logger;
    }
}