typeof EnforceAjax 不可分配给类型中间件

Posted

技术标签:

【中文标题】typeof EnforceAjax 不可分配给类型中间件【英文标题】:typeof EnforceAjax is not assignable to type Middleware 【发布时间】:2019-08-16 01:05:43 【问题描述】:

我有以下类和接口:

export class EnforceAjax implements Middleware 
  public handle(client: Client) 
    return client.ajax === true
  


export interface Middleware 
  handle?(client: Client, ...args: any[]): boolean | Response

当我尝试执行以下操作时:

Router.group('/api',  middleware: [EnforceAjax] , async () => require('./api'))


export interface RouterOptions 
  middleware?: (Middleware | string)[]


public static group(routePrefix: string, options: RouterOptions, callback: Function): void

我收到以下错误:

类型 'typeof EnforceAjax' 不可分配给类型 'string |中间件”。 “typeof EnforceAjax”类型的值与“Middleware”类型没有共同的属性。你的意思是给它打电话吗?

当我添加 new 关键字时,错误消失了,但是我不想将类的实例作为值传递到数组中。

【问题讨论】:

嗯,EnforceAjax 的静态方法不匹配接口Middleware,只有 instance 方法匹配。所以是的,你需要传递一个实例。 EnforceAjax 不是Middleware,它是一个构造函数,当newed 时产生Middleware。如果你想让EnforceAjax 成为Middleware,也许你想让handle() 成为static 【参考方案1】:

然后键入middleware 作为中间件构造函数:

 export interface RouterOptions 
   middleware?: ( new(): Middleware;  | string)[]
 

不知道为什么你需要一门课。

【讨论】:

我正在使用一个类,因为一些中间件类可能更复杂一些。

以上是关于typeof EnforceAjax 不可分配给类型中间件的主要内容,如果未能解决你的问题,请参考以下文章

react-router-dom TypeScript TS2322:类型'typeof Index'不可分配给类型

Typescript React/Redux:“typeof MyClass”类型的参数不可分配给“ComponentType<...”类型的参数

带有 Typescript 和 react-redux 的有状态组件:“typeof MyClass”类型的参数不可分配给 Component 类型的参数

Vue3 中的错误 - 'typeof import("../dist/vue")' 类型的参数不可分配给 'PublicAPIComponent' 类型的参数

类型“typeof Row”不可分配给类型“ComponentType<ListChildComponentProps<any>> & ReactNode”。 TS27

为啥 Typescript 允许将“任何”对象类型分配给类对象?