如何为使用参数调用React setState的函数创建TypeScript类型?

时间:2018-12-02 20:46:33

标签: reactjs typescript

这是行不通的,因为Partial<IState>返回的类型可以包含undefined作为setState不可接受的值。

interface IState {
  bar: number
  baz: boolean
}

class App extends React.Component<{}, IState> {
  constructor(props) {
    super(props)
    this.state = {
      bar: 123,
      baz: false,
    }
  }
  public render() {
    return null
  }
  public update(options: Partial<IState>) {
    this.setState(options)
  }
  public callUpdate() {
    this.update({ bar: 4 })
  }
}

我发现的唯一解决方案是将当前状态也添加到setState中:

this.setState({  ...this.state, ...options })

还有更好的方法吗?

打字稿版本:3.2.1

2 个答案:

答案 0 :(得分:1)

您可能要使用类型声明

NULL

不建议使用dlsym,因为您必须解构当前状态对象,这是不必要的

答案 1 :(得分:0)

如果确定从未定义过选项,则可以在作为非null断言运算符的选项之后添加一个感叹号。

  public update(options: Partial<IState>) {
    this.setState(options!)
  }

我想指出,使用this.setState({ ...this.state, ...options })可能会导致数据丢失。因为this.state直到下一个渲染才会更新。如果要使用当前状态,则应改用this.setState(state => ({...state, ...options})