Javascript 反应类型脚本函数组件类型

Javascript 反应类型脚本函数组件类型,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,我正在尝试用typescript构建react应用程序,但在正确键入组件时遇到了一些问题 这是我的代码: import React from 'react'; import PropTypes, { InferProps } from 'prop-types'; import clsx from 'clsx'; import { makeStyles } from '@material-ui/styles'; import { Typography, Link, Theme } from '@m

我正在尝试用typescript构建react应用程序,但在正确键入组件时遇到了一些问题

这是我的代码:

import React from 'react';
import PropTypes, { InferProps } from 'prop-types';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/styles';
import { Typography, Link, Theme } from '@material-ui/core';

const useStyles = makeStyles((theme: Theme) => ({
    root: {
        padding: theme.spacing(4),
    },
})); 

const Footer: any = (props: InferProps<typeof Footer.propTypes>): JSX.Element => {
    const { className, ...rest } = props;
    const classes = useStyles();

    return (
        <div {...rest} className={clsx(classes.root, className)}>
        </div>
    );
};

Footer.propTypes = {
    className: PropTypes.string,
};

export default Footer;
问题是,如果使用prop type库中的InferProps,则无法使用const Footer:React.FC,而必须使用any

小问题:我这样做对吗


亲切问候

由于您使用的是TypeScript,您可能不再需要使用道具类型,因为:

TypeScript将在编译期间完成所有工作,不会让 您构建了不匹配的类型 PropsTypes是非常重的lib,你在生产中得到它,无论如何,只有dev wich被TS觊觎 话虽如此,我建议您使用以下代码:

import React from 'react';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/styles';
import { Theme } from '@material-ui/core';

const useStyles = makeStyles((theme: Theme) => ({
  root: {
    padding: theme.spacing(4),
  },
}));

interface OwnProps {
  className: string;
}

const Footer: React.FC<OwnProps> = (props) => {
  const { className, ...rest } = props;
  const classes = useStyles();

  return <div {...rest} className={clsx(classes.root, className)} />;
};

export default Footer;

由于您使用的是TypeScript,因此可能不再需要使用道具类型,因为:

TypeScript将在编译期间完成所有工作,不会让 您构建了不匹配的类型 PropsTypes是非常重的lib,你在生产中得到它,无论如何,只有dev wich被TS觊觎 话虽如此,我建议您使用以下代码:

import React from 'react';
import clsx from 'clsx';
import { makeStyles } from '@material-ui/styles';
import { Theme } from '@material-ui/core';

const useStyles = makeStyles((theme: Theme) => ({
  root: {
    padding: theme.spacing(4),
  },
}));

interface OwnProps {
  className: string;
}

const Footer: React.FC<OwnProps> = (props) => {
  const { className, ...rest } = props;
  const classes = useStyles();

  return <div {...rest} className={clsx(classes.root, className)} />;
};

export default Footer;

你试过const Footer:React.FC吗?为什么不定义你自己的接口而不是使用PropTypes呢?PropTypes已经存在了,我正在重新设计我的应用程序,加上PropTypes在运行时工作,而接口只在编译时工作,所以我必须两者都做。这样,我只需要创建1。您是否尝试过const Footer:React.FC?为什么不定义自己的接口而不是使用PropTypes?PropTypes已经存在了。我正在重新设计我的应用程序,加上prop types在运行时工作,而接口只在编译时工作,所以我必须同时进行。这样,我只需要创建1。好吧,这不是问题的真正答案,但我会为你的解决方案!互联网同意你!好吧,这不是问题的真正答案,但我会支持你的解决方案!互联网同意你!