javascript - react 组件 Prop 中的流泛型

标签 javascript reactjs flowtype

我正在尝试使用泛型键入组件的 props,但 flow 没有捕获到错误。基本上,我想要一个包含两个属性 fetchcb 的组件。无论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' } />
 );

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

这是 repl .

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

const fun = <T>(a: () => T, b: T => T): T => b(a());
fun(() => 2, n => 'qwe');

最佳答案

在函数的情况下你错了。它应该分配给一个变量:

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

const r: number = f(() => 2, n => ""); // error

try it

但是对于组件 props 的情况......也许它希望被参数化,但我找不到一种方法来参数化组件。

关于javascript - react 组件 Prop 中的流泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50473335/

相关文章:

javascript - 安装扩展后找不到模块

reactjs - 组件在初始化后正在更改不受控制的 Slider 的默认值状态。具有 Redux 状态的 Material UI slider

javascript - React、wepack、babel、node、npm 启动错误

javascript - 流类型: how to type dynamic classes factories

javascript - 从 div1 选择 <li>,点击按钮,移动到 div2

javascript - 如何将所有css文件放在一个文件中,将所有javascript文件放在一个文件中

reactjs - 在哪里放置声明的最佳实践?

flowtype - 流动。如何根据函数参数指定联合类型

javascript - MVC webgrid 列宽?

javascript - 不需要的 React 组件重新渲染?