我对如何在TS中进行这种类型转换感到困惑。我正在定义一个需要为此类型的类方法(https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react-big-calendar/index.d.ts#L229)
我正在尝试做这样的事情...
public onSelectSlot: Pick<BigCalendarProps<InterviewEvent>, 'onSelectSlot'> = (slot) => {
this.setCreateDialog(true, slot.slots.slice(0, -1));
}
但是这不起作用,我无法弄清楚如何将函数arg类型从链接的那个接口中拉出来。我该怎么做呢?
答案 0 :(得分:2)
您正在使用Pick
,它将不会返回属性的类型,而是具有所拾取属性的对象类型。
您可以使用类型查询来获取onSelectSlot
的类型。
public onSelectSlot: BigCalendarProps<InterviewEvent>['onSelectSlot'] = (slot) => {
this.setCreateDialog(true, slot.slots.slice(0, -1));
}
答案 1 :(得分:0)
Pick返回一组属性
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }
因此,如果要获得属性,则需要提供这样的属性密钥
public onSelectSlot: Pick<
BigCalendarProps<InterviewEvent>,
'onSelectSlot'
>['onSelectSlot'] = slot => {};
或者您可以定义类型别名
type PickPropertie<T, K extends keyof T> = T[K];
并使用它。
public onSelectSlot: PickPropertie<
BigCalendarProps<InterviewEvent>,
'onSelectSlot'
> = slot => {};