Reactjs 缺少接口属性错误,但它为';事实上,它并没有丢失
我目前正在将一个大项目转换为TypeScript。我是个新手,不习惯 因此,使用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/*'/
@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>
)
}