Typescript扩展同一接口的不兼容泛型类型

Typescript扩展同一接口的不兼容泛型类型,typescript,generics,typescript-typings,typescript-generics,hapi,Typescript,Generics,Typescript Typings,Typescript Generics,Hapi,为什么处理程序函数中的请求类型不兼容。我假设请求和扩展请求的ApiServerRequest是兼容的,为什么不兼容呢 const app = {} type App = typeof app const testRoute = { method: 'GET', path: '', options: { tags: ['api'], description: '', }, handler (request: ApiServerRequest<App>

为什么处理程序函数中的请求类型不兼容。我假设请求和扩展请求的ApiServerRequest是兼容的,为什么不兼容呢

const app = {}
type App = typeof app

const testRoute = {
  method: 'GET',
  path: '',
  options: {
    tags: ['api'],
    description: '',
  },
  handler (request: ApiServerRequest<App>, reply: ResponseToolkit): ResponseObject {
    return reply.view('landing', {
      customerLandingHash: request.params.customerWalletPassId
    })
  }
}
const-app={}
类型App=类型App
常数testRoute={
方法:“GET”,
路径:“”,
选项:{
标签:['api'],
说明:“”,
},
处理程序(请求:ApiServerRequest,回复:ResponseToolkit):ResponseObject{
返回reply.view('landing'{
customerLandingHash:request.params.customerWalletPassId
})
}
}
类型脚本编译引发错误

  • 类型“(请求:ApiserRequest)=>Lifecycle.ReturnValue”不可分配给类型“ApiserRequestHandler”
  • 参数“request”和“request”的类型不兼容
  • 类型“Request”不可分配给类型“ApiServerRequest”

    • 处理程序:(请求:ApiServerRequest,回复:ResponseToolkit):ReturnValue=>{
代码

import{
服务器,
服务器选项,
生命周期,
服务器路径,
常规操作,
响应工具箱,
响应对象
}来自“@hapi/hapi”
导出类ApiServer扩展服务器{
app:A={}作为
构造函数(选项:服务器选项,应用程序:A){
超级(选项)
this.app=app
还这个
}
路由(路由:ApiServerRoute |数组):无效{
超级路线(路线)
}
}
导出接口ApiServerRequest扩展请求{
服务器:ApiServer
}
导出接口ApiServerRequestHandler扩展了生命周期{
(请求:ApiServerRequest,回复:ResponseToolkit,错误?:错误):Lifecycle.ReturnValue
}
导出接口ApiServerRoute扩展了ServerRoute{
处理程序:ApiServerRequestHandler,
选项:ApiServerRouteOptions
}
导出接口ApiServerRouteOptions扩展RouteOptions{
标签:['api']|['api',字符串]
描述:字符串,
处理程序?:ApiServerRequestHandler
}

ApiServerRequest
可分配给
Request
类型的参数,而不是另一种方式。@Timo你的意思是什么?实际上问题是编译器不允许这样做,我不知道为什么:(
import { 
  Server, 
  ServerOptions, 
  Lifecycle, 
  ServerRoute,
  RouteOptions, 
  ResponseToolkit, 
  ResponseObject 
} from '@hapi/hapi'

export class ApiServer<A> extends Server {
  app: A = {} as A

  constructor (options: ServerOptions, app: A) {
    super(options)
    this.app = app
    return this
  }

  route (route: ApiServerRoute<A> | Array<ApiServerRoute<A>>): void {
    super.route(route)
  }
}

export interface ApiServerRequest<A> extends Request {
  server: ApiServer<A>
}

export interface ApiServerRequestHandler<A> extends Lifecycle.Method {
  (request: ApiServerRequest<A>, reply: ResponseToolkit, err?: Error): Lifecycle.ReturnValue
}

export interface ApiServerRoute<A> extends ServerRoute {
  handler: ApiServerRequestHandler<A>,
  options: ApiServerRouteOptions<A>
}

export interface ApiServerRouteOptions<A> extends RouteOptions {
  tags: ['api'] | ['api', string] 
  description: string,
  handler?: ApiServerRequestHandler<A>
}