Typescript扩展同一接口的不兼容泛型类型
为什么处理程序函数中的请求类型不兼容。我假设请求和扩展请求的ApiServerRequest是兼容的,为什么不兼容呢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>
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>
}