함수형 컴포넌트의 타입을 선언하는 방법이 두 가지가 있다.
// prop 타입 정의
**interface StarsProps {**
star: number;
}
const Stars: React.**FC<StarsProps>** = ({ star }) => {
return (
<div>
{makeStars(star)}
</div>
)
}
FunctionComponent 타입을 제공하며, 줄여서 FC로 사용할 수 있다. 컴포넌트 함수 타입을 정의한 FC에 제네릭<>으로 props 타입을 전달해야 한다.// node_modules폴더 하위에 "**@types/react/index.d.ts**"경로
type FC<P = {}> = FunctionComponent<P>; // 1
interface FunctionComponent<P = {}> { // 2
(props: PropsWithChildren<P>, context?: any): ReactElement<any, any> | null; // 3
propTypes?: WeakValidationMap<P>;
contextTypes?: ValidationMap<any>;
defaultProps?: Partial<P>;
displayName?: string;
}
함수형 컴포넌트는 곧 함수이므로, 이번에는 일반 함수를 선언하듯이 타입을 정의할 수 있다.
// prop 타입 정의
**interface StarsProps {**
star: number;
}
const Stars = ({ star }: StarsProps): JSX.Element => { // 1
// 로직
return (
<div>
{makeStars(star)}
</div>
)
}
props를 매개변수로 받고 JSX를 return 해야 한다. 매개변수 타입을 StarsProps로, 반환하는 타입을 JSX.Element로 직접 명시한다.