import { RequestOptions2 } from 'urllib'; import { Service } from 'egg' import * as Raven from 'raven' interface PagenatedResult { data: T[] total: number } export class BaseService extends Service { baseFields: string[] requestToPass: (host: string, url: string, options: RequestOptions2) => Promise constructPaginatedResult: (result: T[], count: number) => PagenatedResult pickFieldForResult: (result: T, fields: string[], withOutFields: string[]) => T } interface ExportSentry { judgeError: (err: any) => boolean extra: any tags: any } declare module 'egg' { // extend context interface Context { validator: { requestBody: () => T requestQuery: () => T requestQueries: () => T } logSentryError: (e: any) => void } // extend your config interface EggAppConfig { sentry: { dsn?: string errCallback?: (err: any) => boolean } } interface Application { Raven: Raven.Client } interface IService { base: BaseService sentry: ExportSentry } }