使用打字稿、Ramda 和 "prop" 进行验证



我正在尝试为自定义TS类型构建一些验证,如下所示:

export type Calendar = {
active: boolean;
businessDay: string[];
displayName: string;
holiday: Holiday[];
label: string;
};
export const isValidCalendar = (calendar: Calendar) =>
allPass([
pipe(prop<string, string>('label'), isNil, not),
pipe(prop<string, string>('displayName'), isNil, not),
])(calendar);

但显然我不能应用(calendar)到我的allPass,由于这个错误:

类型为'[Calendar]'的参数不能赋值给类型为'Record<string,>,Record<string,>"。类型'[Calendar]'中缺少类型'string'的索引签名。ts(2345)

为什么会发生这种情况?我怎么解它?

我解决了这个问题,创建了我自己的"谓词";类型,并添加到allPass

type Pred<T> = (x: T) => boolean;
export const isValidCalendar = allPass<Pred<Calendar>>([
pipe(prop('label'), isNil, not),
pipe(prop('displayName'), isNil, not),
pipe(prop('businessDay'), length, gt(__, 0)),
]);

最新更新