Javascript 用fluentapi扩充Typescript

Javascript 用fluentapi扩充Typescript,javascript,typescript,Javascript,Typescript,我有一些快速模块扩充。我的目的是能够做到: request.message('Hello').status(400).json({}); status和json函数是expressResponse对象的一部分。这些函数返回调用它们以允许链接的响应对象(也称为fluent API) 我希望添加我自己的消息函数来完成大致相同的操作。我的增强看起来是这样的: import { SomeType } from '...'; declare global { namespace Express

我有一些快速模块扩充。我的目的是能够做到:

request.message('Hello').status(400).json({});
status
json
函数是express
Response
对象的一部分。这些函数返回调用它们以允许链接的
响应
对象(也称为fluent API)

我希望添加我自己的
消息
函数来完成大致相同的操作。我的增强看起来是这样的:

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


这没什么区别。如前所述:Typescript认为此处返回的对象上只有getSomeType/message函数

如果您这样编写,它可能会工作:

import { SomeType } from '...';

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

类似的问题

如果你这样写,可能会有用:

import { SomeType } from '...';

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

是类似的问题

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

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

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

好的,找到了解决办法。我需要将express导入我的类型扩充,并使我的扩充返回
express.Response

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

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

Express不是一家全球性的公司。因此,你正在这样做wrong@AluanHaddad我不太确定。这确实有点像黑魔法,但是我需要的关于
导入的东西需要这个。在谷歌搜索了很多次之后,我找到了原因(并不是因为我记得是什么原因)。如果我改为
declare module'express'{..}
!Express不是一家全球性的公司。因此,你正在这样做wrong@AluanHaddad我不太确定。这确实有点像黑魔法,但是我需要的关于
导入的东西需要这个。在谷歌搜索了很多次之后,我找到了原因(并不是因为我记得是什么原因)。如果我改为
declare module'express'{..}
!唉,这样做会破坏我对express的所有增强功能。阅读该线程的不同答案很有趣(我以前见过)…你看到他们都有评论说“X对我不起作用,我必须做Y”。到目前为止,唯一适合我的是我发布的。。。至少在本期之前:)我有以下内容(与express相关):
“@types/express”:“^4.16.1”、
“@types/express session”:“^1.15.12”、
运行typescript
3.3.3333
还有一个问题:这个声明是在
d.ts
文件中还是
ts
文件中?它在一个名为
express.d.ts
的文件中,这样做会破坏我对express的所有增强功能。阅读该线程的不同答案很有趣(我以前见过)…你看到他们都有评论说“X对我不起作用,我必须做Y”。到目前为止,唯一适合我的是我发布的。。。至少在本期之前:)我有以下内容(与express相关):
“@types/express”:“^4.16.1”、
“@types/express session”:“^1.15.12”、
运行typescript
3.3.3333
还有一个问题:这个声明是在
d.ts
文件中还是
ts
文件中?它在一个名为
express.d.ts