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
,它是一个构造函数,当new
ed 时产生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