Javascript 将常量函数代码从JSX转换为TSX

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

我试图将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 => (
        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) {
        ...
    };