从组件道具中作为子项运行的类型

时间:2018-01-01 12:16:23

标签: reactjs typescript

在这种情况下,有没有办法获得正确的打字?

<Resource data={{ foo: 1 }}>{data => data.foo}</Resource>;
                                            ^
                                     should be number

我从没有React的简单示例开始,这很容易:

type IResult<P> = { [key in keyof P]: P[key] };
function foo<P>(
  c: (data: IResult<P>) => any,
  props: { data: P }
) {
  c(props.data);
}

foo(data => data.foo, { // `data.foo` is number
  data: { foo: 1 },
});

但是当我尝试使用与React类似的实现时,我没有运气:/

type IResult<P> = { [key in keyof P]: P[key] };

interface IRProps<T = any> {
  data: T;
  children(data: IResult<T>): React.ReactNode;
}

class Resource extends React.Component<IRProps> {
  render() {
    return this.props.children(this.props.data);
  }
}

我所能获得的只是(parameter) data: {}(parameter) data: any

我使用的是最近打字的Typescript v2.6.1和React 16.2

谢谢!

1 个答案:

答案 0 :(得分:0)

JSX和Generics有点凝聚力,所以我们必须播放一个&#39; make打字稿吃这个&#39;游戏:

enter image description here