查看: 35|回复: 0

tsx 编写react 遇见类型“Readonly<{}>”上不存在属性XXX解决办法

[复制链接]

3

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2012-4-4
发表于 2020-6-2 11:04:00 | 显示全部楼层 |阅读模式

这样的问题是TS语法类型检测的时候会报错,这时候可以给state个props生命类型,问题解决,代码如下:

import React from "react";
type StateType = {
  name: string;
  number: number;
};
type propType = {
    name: string;
    number: number;
  };
interface Test1 {
  state: StateType;
  props:propType
}
class Test1 extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      name: "",
      number: 2
    };
  }

  render() {
    console.log(this.props.name);
    return (
      <div>
        <div>
          <label htmlFor="">单号</label>
          <input
            type="text"
            value={this.state.name}
            onChange={e => this.setState({ name: e.target.value })}
          />
        </div>
        <div>
          <label htmlFor="">创建用户</label>
          <input
            type="text"
            value={this.state.number}
            onChange={e => this.setState({ number: e.target.value })}
          />
        </div>
        <div></div>
      </div>
    );
  }
}

export default Test1;

这个

propType和
StateType 
就是声明类型的地方,如此问题解决,网上还有一种方案是把
React.Component改成
 React.Component<any, any>
但是这样一来对state和props的类型检测就失去意义了,所以不太建议使用
但是其实还能这么写,看一下TS的解释会发现
React.Component<any, any>
 这里面的第一个any可以是props的类型,第二个any可以是state的类型,即:
class Test1 extends React.Component<propType,StateType>
问题一样可以解决
 
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部