属性'setUser'在类型'Readonly <{}>和Readonly <{children?中不存在:ReactNode; }>'

时间:2020-08-10 09:59:54

标签: reactjs typescript electron

当我使用 yarn start 运行它时,我的Reactjs + ElectronJS应用程序运行良好。 当我尝试使用 yarn build 构建它时,出现此错误。 我不明白怎么了。

Property 'setUser' does not exist on type 'Readonly<{}> & Readonly<{ children?: ReactNode; }>'.

这是导致错误的代码:

export const test = () => ({
 type: 'TEST',
});

export const setUser = (mail, pwd, token, firstname, lastname) => ({
type: 'SET_USER',
payload: {
    Email: mail,
    Pwd: pwd,
    Token: token,
    Firstname: firstname,
    Lastname: lastname,
}
});

我在其他地方使用它进行身份验证:

  GetInfoFromBack() {
const param : any[] = [];

for (var i = 0; i < arguments.length; ++i) {
  param[i] = arguments[i];
}

if (param[1] === null && param[2] != null) {
  axios.get('http://104.xx.xx.192:xxxx' + param[0], param[2])
  .then(response => {
    if (param[0] === "/get_auth_user") {
      this.props.setUser(response.data.email, this.props.base.Pwd, this.props.base.Token, response.data.firstname, response.data.lastname);
    }
  }).catch(err => {
    alert(err.response.data);
  })
} else {
  alert("ERROR: bad request : " + param);
}
}

1 个答案:

答案 0 :(得分:1)

该错误与为组件上的prop推断的类型有关。它回落到了React的props默认值。

两个案例相交以定义此默认值...

Readonly<{}> & Readonly<{ children?: ReactNode; }>

a)没有道具键

b)可能会有一个子道具键(如果您通过JSX向元素添加了一些内容,例如标签,文本或渲染道具)。

要解决此问题,您需要明确说明组件消耗的道具类型。

JSX typescript documentation看来,这可能最终看起来像这样,以确保对this.props的访问可以依赖于setUser函数...

import {
  setUser
} from './myfile'

interface MyProps {
  children: JSX.Element | JSX.Element[]
  setUser: typeof setUser
}

class Component extends React.Component<MyProps, {}> {
  render() {
    return (
      <h2>
        {this.props.children}
      </h2>
    )
  }
}