使用流畅的API进行打字稿增强

时间:2019-03-18 19:03:48

标签: javascript typescript

我有一些快速模块扩展。我的意图是能够做到:

request.message('Hello').status(400).json({});

statusjson函数是快速Response对象的一部分。这些函数返回它们被调用以允许链接的Response对象(也称为流利的API)。

我希望添加自己的message函数来执行相同的操作。我的扩增看起来像这样:

import { SomeType } from '...';

declare global {
    namespace Express {
        interface Response {
            // This works.  
            getSomeType(): SomeType;

            // This does not.  Typescript thinks the object returned here has ONLY the getSomeType/message functions on it
            message(str: string): Response; 
        }
    }

我尝试过

的变体
message(str: string): Express.Response

message(str: string): Response & Express.Response

这没什么区别。和以前一样:Typescript认为此处返回的对象仅具有getSomeType / message函数

2 个答案:

答案 0 :(得分:2)

也许您这样写就可以了:

def my_func(a,b):
    return a%b

Here是类似的问题

答案 1 :(得分:0)

好,找到解决方案。我需要将express导入到类型扩充中,并使扩充返回express.Response

import { SomeType } from '...';
import express from 'express';

declare global {
    namespace Express {
        interface Response { 
        getSomeType(): SomeType;
        message(str: string): express.Response; 
    }
}