Я хочу добавить объявление к методу koa-router
get
, которое позволит мне добиться привязки модели маршрута с помощью TypeORM.
Что-то вроде следующего:
router.get("/photos/:photo", (photo: Photo) => {
return { photo }
});
Если бы я должен был вызвать /photos/1
, он бы возвратил объект Photo в виде JSON.
Типы коа-роутера находятся по адресуhttps://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/koa-router/index.d.ts#L184
Итак, я попытался расширить класс, объявить аргументы метода базового класса, а также добавить дополнительное объявление.
import * as Router from 'koa-router'
export class LoopedRouter<StateT, CustomT> extends Router {
get(path: string | RegExp | (string | RegExp)[], ...middleware: Array<Router.IMiddleware<StateT, CustomT>>): Router<StateT, CustomT>;
get(path: string, callback: Function): Router {
// code here to support base class and extended API
let args = resolveModels(path, callback)
return super.get(path, ctx => callback(...args))
}
}
Однако я получаю следующую ошибку от tsc:
error TS2416: Property 'get' in type 'LoopedRouter<StateT, CustomT>' is not assignable to the same property in base type 'Router<any, {}>'.
Type '(path: string | RegExp | (string | RegExp)[], ...middleware: Middleware<ParameterizedContext<StateT, CustomT & IRouterParamContext<StateT, CustomT>>>[]) => Router<StateT, CustomT>' is not assignable to type '{ (name: string, path: string | RegExp, ...middleware: Middleware<ParameterizedContext<any, IRouterParamContext<any, {}>>>[]): Router<any, {}>; (path: string | RegExp | (string | RegExp)[], ...middleware: Middleware<...>[]): Router<...>; <T, U>(name: string, path: string | RegExp, middleware: Middleware<...>, routeH...'.
Types of parameters 'middleware' and 'path' are incompatible.
Type 'string | RegExp' is not assignable to type 'Middleware<ParameterizedContext<StateT, CustomT & IRouterParamContext<StateT, CustomT>>>'.
Type 'string' is not assignable to type 'Middleware<ParameterizedContext<StateT, CustomT & IRouterParamContext<StateT, CustomT>>>'.
5 get(path: string | RegExp | (string | RegExp)[], ...middleware: Array<Router.IMiddleware<StateT, CustomT>>): Router<StateT, CustomT>;