反应组件道具中的流泛型

Sam*_*Rad 5 javascript reactjs flowtype

我正在尝试使用泛型键入组件的道具,但 flow 没有捕获错误。基本上,我想要一个带有两个 propsfetchcb. 无论fetch返回什么类型,都应该是cb.

// @flow
import React, { Component } from 'react';

type Props<T> = {
  fetch: () => Promise<T>,
  cb: T => T,
};

class Client<T> extends Component<Props<T>> {

  componentDidMount() {
    const { fetch, cb } = this.props;
    fetch().then(cb);
  }

  render() {
    return (<div />)
  }
}
        
const App = () => (
  <Client
    fetch={ () => Promise.resolve(1) } 
    cb={ n => 'sfd' } />
 );
Run Code Online (Sandbox Code Playgroud)

在底部,我将一个函数传递给fetch解析为numbercb返回 astring并且没有流错误的函数。为什么?

这是repl

这甚至不是react一回事。一个简单的函数将无法检查类型:

const fun = <T>(a: () => T, b: T => T): T => b(a());
fun(() => 2, n => 'qwe');
Run Code Online (Sandbox Code Playgroud)

小智 1

如果是函数,你就错了。它应该分配给一个变量:

function f<T>(a: () => T, b: T => T): T {
    return b(a());
}

const r: number = f(() => 2, n => ""); // error
Run Code Online (Sandbox Code Playgroud)

尝试一下

但如果是组件道具……也许它期望被参数化,但我找不到参数化组件的方法。