问题描述
我正在开发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 (将#修改为@)