如何使用 Typescript 正确扩展 Joi

问题描述

我正在开发a Typescript client for retrieving currency exchange rates
我有这些接口:

    export interface BaseRequestParams {
        lang?: Lang
        output?: MediaType
        path?: string
    }

    export interface DailyRatesRequestParams extends BaseRequestParams {
        referenceDate: string // Format: YYYY-MM-DD
        baseCurrencyIsoCodes: Array<keyof typeof currencies>
        currencyIsoCode: 'EUR' | 'USD' | 'ITL'
    }

和相应的验证器如下:

export const BaseRequestParamsValidator: Joi.ObjectSchema<BaseRequestParams | DailyRatesRequestParams> = Joi.object({
  lang: Joi.string()
           .allow('en','it')
           .insensitive()
           .default('en'),output: Joi.string()
              .allow(Object.values(MediaType).join(','))
              .default(MediaType.JSON),path: Joi.when('output',{
    not: MediaType.JSON,then: Joi.string().required(),otherwise: Joi.string(),}),});

// eslint-disable-next-line max-len
export const DailyRatesRequestParamsValidator: Joi.ObjectSchema<DailyRatesRequestParams> = BaseRequestParamsValidator.keys({
  referenceDate: Joi.string()
                    .required()
                    .pattern(new RegExp(/(\d){4}-(\d){2}-(\d){2}/)),baseCurrencyIsoCodes: Joi.string()
                           .allow(Object.keys(currencies).join(','))
                           .required(),});

它基本上可以工作,尤其是在运行时,但是正如您所看到的,我为 BaseRequestParamsValidator 指定了联合类型,以便在派生类型上自动完成。但是,这并不正确,因为基本类型不应该包含其他类型,只包含我在那里指定的三个字段。
问题是 similar to this one,Typescript 用法除外。 有没有更好的方法来指定验证器类型(又名 Joi.ObjectSchema)? 谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)