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
函数是expressResponse
对象的一部分。这些函数返回调用它们以允许链接的响应
对象(也称为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”、
运行typescript3.3.3333
还有一个问题:这个声明是在d.ts
文件中还是ts
文件中?它在一个名为express.d.ts
的文件中,这样做会破坏我对express的所有增强功能。阅读该线程的不同答案很有趣(我以前见过)…你看到他们都有评论说“X对我不起作用,我必须做Y”。到目前为止,唯一适合我的是我发布的。。。至少在本期之前:)我有以下内容(与express相关):“@types/express”:“^4.16.1”、
和“@types/express session”:“^1.15.12”、
运行typescript3.3.3333
还有一个问题:这个声明是在d.ts
文件中还是ts
文件中?它在一个名为express.d.ts