interface ReactElement<
P = any,
T extends string | JSXElementConstructor<any> =
| string
| JSXElementConstructor<any>
> {
type: T;
props: P;
key: Key | null;
}
generic 타입 매개변수
JSXElementConstructor
(JSX 요소 생성자) 타입 중 하나로 지정되어 있음interface의 속성들
🔎 제한적이라는게 무슨 의미냐면,,
type ElComponentProps = {
children: ReactElement;
};
const ElComponent = ({ children }: ElComponentProps) => {
return <>{children}</>;
};
function COMPONENT() {
return (
<div>
<ElComponent>
<input />
</ElComponent>
</div>
);
}
위의 경우 JSX 요소인 input 태그를 children으로 보내주기 때문에 에러가 발생하지 않는다.
function COMPONENT() {
return (
<div>
<ElComponent>Hello:) 나는 그냥 문자열</ElComponent>
</div>
);
}
하지만 그냥 문자열이라도 넣게 되면..?
🐟 개복치처럼 이렇게 에러를 발생시킨다.
// Global
declare global {
namespace JSX {
interface Element extends React.ReactElement<any, any> {}
}
}
ReactNode, ReactChild, ReactElement 타입 비교
When to use JSX.Element vs ReactNode vs ReactElement?
react#ReactElement TypeScript Examples