Javascript 将常量函数代码从JSX转换为TSX
我试图将JSX中定义备用路由组件的方式转换为等效的TypeScript TSX文件。(一) JSX语法如下所示:Javascript 将常量函数代码从JSX转换为TSX,javascript,reactjs,typescript,asp.net-core,visual-studio-2017,Javascript,Reactjs,Typescript,Asp.net Core,Visual Studio 2017,我试图将JSX中定义备用路由组件的方式转换为等效的TypeScript TSX文件。(一) JSX语法如下所示: import React from 'react'; import { Route, Redirect } from 'react-router-dom'; export const PrivateRoute = ({ component: Component, ...rest }) => ( <Route {...rest} render={props =&g
import React from 'react';
import { Route, Redirect } from 'react-router-dom';
export const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
localStorage.getItem('user')
? <Component {...props} />
: <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
)} />
)
我不太理解lambda函数的({component:component,…rest})
语法。这是我用打字机写的
export function PrivateRoute(Component: React.Component, ...rest: any[]) {
return (
<Route {...rest} render={props => (
localStorage.getItem('user')
? <Component {...props} />
: <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
)} />
);
};
导出函数PrivateRoute(组件:React.Component,…rest:any[]){
返回(
(
localStorage.getItem('用户')
?
:
)} />
);
};
有什么建议吗
参考资料:
关于错误-JSX/TSX
({component:component,…rest})
意味着通过在函数作用域中分解并将其重命名为component
,并通过“rest”将对象的其余属性放在名为rest
的变量中,从而从对象中获取component
属性操作员(…
)。我希望这能澄清问题,我不知道TS,所以我不能帮你重构:)好的,这很有趣。这个语法有我可以在谷歌上搜索到的名字吗?或者你可以在上面找到任何文档吗?好的旧MDN文档有很多例子。请注意,在数组和对象上可以使用解构运算符和rest/spread运算符:为什么不使用syntaxHow类呢?TypeScript编译器似乎需要React.ComponentType
的类型参数。有关于应该是什么的提示吗?ComponentType
,所以不需要。无论如何,这是道具类型的组件。如果在没有明确指定类型参数的情况下它对您不起作用,您可以将privaterout
设置为泛型,或者只使用React.ComponentType
,但这绝对不是我们在打字中看到的必需
export function PrivateRoute(Component: React.Component, ...rest: any[]) {
return (
<Route {...rest} render={props => (
localStorage.getItem('user')
? <Component {...props} />
: <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
)} />
);
};
type RouteProps = { component: React.ComponentType };
export function PrivateRoute(
{ component: Component, ...rest }: RouteProps) {
...
};