Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 缺少接口属性错误,但它为';事实上,它并没有丢失_Reactjs_Typescript_Reach Router - Fatal编程技术网

Reactjs 缺少接口属性错误,但它为';事实上,它并没有丢失

Reactjs 缺少接口属性错误,但它为';事实上,它并没有丢失,reactjs,typescript,reach-router,Reactjs,Typescript,Reach Router,我目前正在将一个大项目转换为TypeScript。我是个新手,不习惯 因此,使用@reach/router,我有以下路由: import { Router } from '@reach/router' export default () => ( <main id='container'> <div> <Error> <Router> <Sign path='sign/*'/

我目前正在将一个大项目转换为TypeScript。我是个新手,不习惯

因此,使用
@reach/router
,我有以下路由:

import { Router } from '@reach/router'

export default () => (
  <main id='container'>
    <div>
      <Error>
        <Router>
          <Sign path='sign/*'/>
          <Dashboard path='/'/>
        </Router>
      </Error>
    </div>
  </main>
)
我得到以下错误:

Property ''*'' is missing in type '{ path: string; }' but required in type 'DefaultProps'.  TS2741

    29 |       <Error>
    30 |         <Router>
  > 31 |           <Sign path='sign/*'/>
       |            ^

属性“*”在类型“{path:string;}”中丢失,但在类型“DefaultProps”中是必需的。TS2741
29 |       
30 |         
> 31 |           
|            ^

有什么问题吗?

您正在将
路径
传递到
符号
组件,它应该包含在您的界面中。接口应该包括传递给组件的所有道具,所以如果您没有传递
*
,TS将抛出一个错误

此外,最好将命名导出和React.FC组件与TypeScript一起使用

以下是关于该主题的解释:

您正在将
路径
传递给
符号
组件,它应该包含在您的界面中。接口应该包括传递给组件的所有道具,所以如果您没有传递
*
,TS将抛出一个错误

此外,最好将命名导出和React.FC组件与TypeScript一起使用

以下是关于该主题的解释:

{*:mode}
的作用是什么?到目前为止,它的唯一假定用途是:

<Sign path='sign/*'/>
在本例中,*不是有效的属性,因为它不是有效的变量名

Sign
所需的唯一道具是
path
,该道具仅为您提供

在您的代码中,您似乎也在使用
模式
作为变量,而不是
*
,如果您的意思是
模式
符号
组件中的可选道具,则应按以下方式编写:

interface DefaultProps extends RouteComponentProps {
  mode?: string
}

export default ({ mode }: DefaultProps) => {
  return (
    <div id='sign'>
      <Router className={cn({ signup: mode === 'up' })}>
        // ...other routes
      </Router>
    </div>
  )
}
interface DefaultProps扩展了RouteComponentProps{
模式?:字符串
}
导出默认值({mode}:DefaultProps)=>{
返回(
//…其他路线
)
}
它看起来也是一个字符串文字,可能是详尽的,因此您也可以通过执行以下操作进行优化:

type mode='up'|'down'

{*:mode}
的作用是什么?到目前为止,它的唯一假定用途是:

<Sign path='sign/*'/>
在本例中,*不是有效的属性,因为它不是有效的变量名

Sign
所需的唯一道具是
path
,该道具仅为您提供

在您的代码中,您似乎也在使用
模式
作为变量,而不是
*
,如果您的意思是
模式
符号
组件中的可选道具,则应按以下方式编写:

interface DefaultProps extends RouteComponentProps {
  mode?: string
}

export default ({ mode }: DefaultProps) => {
  return (
    <div id='sign'>
      <Router className={cn({ signup: mode === 'up' })}>
        // ...other routes
      </Router>
    </div>
  )
}
interface DefaultProps扩展了RouteComponentProps{
模式?:字符串
}
导出默认值({mode}:DefaultProps)=>{
返回(
//…其他路线
)
}
它看起来也是一个字符串文字,可能是详尽的,因此您也可以通过执行以下操作进行优化:


type mode='up'|'down'

路径
RouteComponentProps
中定义,并且
*
被传递(这由
@reach/router
管理)@Strebler确定,不知道。您是否尝试过使用
纱线添加@types/reach\uu路由器安装/重新安装reach/router type
路径在
RouteComponentProps
中定义,
*
通过(由
@reach/router
管理)@Strebler确定,不知道。您是否尝试过使用
纱线添加@types/reach\uu router
安装/重新安装reach/router类型?
*
是有效的属性名称,而道具只是一个对象。这个命名不是我的选择,它来自
@reach/router
。属性
*
包含来自
符号/*
的实际子路径字符串。这是正确的,在纯JS中可以完美地工作。
*
是一个有效的属性名,而道具只是一个对象。这个命名不是我的选择,它来自
@reach/router
。属性
*
包含来自
符号/*
的实际子路径字符串。这是正确的,在纯JS中工作得很好。你有没有找到解决方法?我刚刚使用
@reach/router
将我们的路由转换为TS。无论我如何处理,同样的TS错误都会突然出现。你有没有找到解决方法?我刚刚使用
@reach/router
将我们的路由转换为TS。无论我如何处理,同样的TS错误都会出现。
interface DefaultProps extends RouteComponentProps {
  mode?: string
}

export default ({ mode }: DefaultProps) => {
  return (
    <div id='sign'>
      <Router className={cn({ signup: mode === 'up' })}>
        // ...other routes
      </Router>
    </div>
  )
}