Reactjs TS2339:不动产';道具';不存在于类型';主页';

Reactjs TS2339:不动产';道具';不存在于类型';主页';,reactjs,typescript,Reactjs,Typescript,我有一个非常基本的程序来处理tsx,我得到了一个错误,我不知道为什么 import React from 'react'; // import {connect} from 'react-redux' export class Home extends React.Component { render(){ console.log(this.props) return ( <div>Working</di

我有一个非常基本的程序来处理tsx,我得到了一个错误,我不知道为什么

import React from 'react';
// import {connect} from 'react-redux'

export class Home extends React.Component {    
    render(){
        console.log(this.props)
        return (
            <div>Working</div>
        )
    }
}


import * as React from 'react'
import * as ReactDOM from 'react-dom';
import {Home} from './Components/Home.component'
class App extends React.Component<any,any>{
render(){
    return(
        <Home value="abc" />
    )
  }
}
ReactDOM.render( <App />, window.document.getElementById("app"))
从“React”导入React;
//从“react redux”导入{connect}
导出类Home扩展React.Component{
render(){
console.log(this.props)
返回(
工作
)
}
}
从“React”导入*作为React
从“react dom”导入*作为react dom;
从“./Components/Home.component”导入{Home}

类应用程序扩展了React。代码的组件

类型脚本需要知道传递给组件的
道具和
状态的形状。如果您确实想阻止Typescript在组件中强制键入(顺便说一句,这会破坏使用Typescript的全部目的),那么需要访问传递给它的
道具
状态
的组件必须指定可以说的类型或形状,如
any
。也就是说,您的组件看起来像这样

export class Home extends React.Component<any, any>
顺便说一句,如果一个类需要
props
和/或
state
,那么扩展该类是不正确的

传递
道具的
any
类型和
状态
意味着相关组件必须接受
道具
状态
的任何形状(类型)

试试这个

import * as React from "react";
import * as ReactDOM from 'react-dom';

export class Home extends React.Component<any, any> {
  render() {
    console.log(this.props)
    return (
      <div>Working</div>
    )
  }
}

class App extends React.Component{
  render() {
    return (
      <Home value="abc" />
    )
  }
}

ReactDOM.render(<App />, document.getElementById("app"));
现在,在这里,您永远无法向
Props
界面中未定义的
Home
组件添加任何其他
prop
。 例如,做如下事情:

<Home value="abc" name="DEF" somethin="else"/>

无法编译,因为
Home
组件使用的
接口中未定义
somethin

要强制执行
状态的形状
,您必须执行与
道具
相同的操作,即定义合同(接口)。 另外,请注意,您仍然需要通过
this
而不是
props
访问
props
,因为这只是结构的类型定义,而不是值本身的持有者


您可以查看此备选方案的演示

在拉下您的回购协议并检查它之后,我意识到您没有用于typescript的

打字是管理和安装TypeScript定义的简单方法

添加此行

"@types/react": "^16.0.25" // or another version you prefer
package.json
并再次运行
npmi
解决了这个问题。试试看,如果这能帮你解决问题,请告诉我:)


PS:TypeScript要求您描述对象和数据的形状。如果你看一下我之前提供的,这是一个相当长且复杂的版本,你需要指定一个描述你的道具的类型,并需要将其传递给相关组件

你是否将道具传递给该组件?请进一步说明这似乎是一个类型脚本类型问题请详细说明,向我们展示将propsLooking传递到任何react类型脚本示例中的父组件,您应该扩展
react.component
。我觉得你在使用typescript编译器,但实际上是在编写纯javascript.React.Component。我试过了,它不起作用。我不认为这是一个问题,为道具创建接口并定义道具类型只是为了验证,我创建了没有接口道具的may组件,它过去工作得很好,我已经测试过了,如果没有在某处定义道具的形状,它就无法工作。只有当我命令组件接受任何类型的道具时,它才会起作用。您在哪个版本的Typescript中遇到上述错误?您编写的组件不需要道具或状态结构的版本是否相同?我的依赖项“css加载器”:“^0.28.7”、“react加载器”:“^16.1.1”、“react dom”:“^16.1.1”、“react redux”:“^5.0.6”、“redux”:“^3.7.2”、“样式加载器”:“^0.19.0”、“ts加载器”:“^3.1.1”、“typescript”:“^2.6.1”,“网页包”:“^3.8.1”,“网页包开发服务器”:“^2.9.4”“好的,谢谢。您是否尝试过上述建议的方法?此外,您不需要为道具创建接口。这是答案的第二部分,我提到了当且仅当你想为你的道具和/或状态实施某种结构时你会采取的方法。我之前试过,它不起作用,但现在起作用了。非常感谢您花费的时间和精力,我已经在devdependences中定义了这一点,我正在尝试添加依赖项,希望如此,我不明白
<Home value="abc" name="DEF" somethin="else"/>
"@types/react": "^16.0.25" // or another version you prefer