📌  相关文章
📜  'JSX.IntrinsicElements'.ts(2339) 类型上不存在属性'userComp' (1)

📅  最后修改于: 2023-12-03 15:29:06.345000             🧑  作者: Mango

类型错误:'JSX.IntrinsicElements'中不存在属性'userComp'

当在使用React和TypeScript的项目中遇到此错误时,通常是因为在使用自定义组件时没有正确地声明或注册组件类型。

原因

在TypeScript中,要想正确地使用组件,需要在组件中声明Props的属性类型。并且在使用组件的时候需要先将组件的类型注册。

例如:

import React from 'react';

type MyComponentProps = {
  name: string;
}

const MyComponent: React.FC<MyComponentProps> = ({ name }) => {
  return (
    <div>
      Hello, {name}!
    </div>
  );
}

export default MyComponent;

上述代码中,我们声明了MyComponent组件的Props类型,并没有忘记将其注册到React中。当我们在其他地方使用MyComponent组件时,TypeScript会自动识别MyComponent的Props类型,并检查使用组件时传递的Props的类型是否与声明的类型相匹配。

解决方法

  1. 将组件导出并在使用该组件的文件中导入组件。
// customComponent.tsx
import React from 'react';

type CustomComponentProps = {
  ...
};

const CustomComponent: React.FC<CustomComponentProps> = ({...}) => {
  ...
};

export default CustomComponent;
// otherComponent.tsx
import React from 'react';
import CustomComponent from './customComponent';

const OtherComponent: React.FC = () => {
  return (
    <div>
      <CustomComponent ... />
    </div>
  );
};

export default OtherComponent;
  1. 在组件中声明Props类型,并在使用组件时将Props传递给组件。
// customComponent.tsx
import React from 'react';

type CustomComponentProps = {
  ...
};

const CustomComponent: React.FC<CustomComponentProps> = ({...}) => {
  ...
};

export { CustomComponentProps };

// otherComponent.tsx
import React from 'react';
import { CustomComponentProps } from './customComponent';

const OtherComponent: React.FC = () => {
  const props: CustomComponentProps = {...};
  
  return (
    <div>
      <CustomComponent {...props} />
    </div>
  );
};

export default OtherComponent;

总之,要想正确地在React和TypeScript中使用自定义组件,需要在组件中声明Props的类型,并在使用组件时注册和传递Props。