我正在尝试为自定义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)),
]);