如何在打字稿中强制转换此函数类型

时间:2018-12-27 08:55:48

标签: typescript

我对如何在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类型从链接的那个接口中拉出来。我该怎么做呢?

2 个答案:

答案 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 => {};