DH의 개발 공부로그
[TypeScript] 리액트 children 타입 지정해주기 - 타입별 특징 본문

Children Props?
리액트 모든 컴포넌트에서 children props
를 사용할 수 있습니다.children props
란 컴포넌트의 여는 태그와 닫는 태그 사이의 내용입니다.
예를 들면,
function App() {
return <Welcome>Hello world!</Welcome>
}
이 태그에서 Hello world!
문자열이 Welcome 컴포넌트의 children props
로 전달이 되어 접근할 수 있습니다.
function Welcome(props) {
return <p>{props.children}</p>;
}
Children Props Type
타입스크립트에서는 Children Props
를 전달을 할 때 타입을 지정을 해주어야 합니다.
그렇다면 어떤 타입으로 지정을 해주어야 하는지 알아보겠습니다.
1. JSX.Element
JSX.Element
은 React Element
를 상속받는 인터페이스로 가장 제한적인 유형입니다.
그렇기 때문에 문자열과 같은 Primitive
타입의 데이터는 따로 전달이 불가능 합니다.

2. React.ReactChild
React.ReactChild
는 React 18
부터 사용을 지양하는 타입입니다.React.ReactChild
는 JSX.Element
와 string
과 number
가 포함이 되어있습니다.
따라서 그 외의 배열과 같은 타입의 데이터는 불가능 합니다.

그렇다면 ReactChild | ReactChild[]
같은 형태로 사용을 하면 배열이 가능하냐?
단일 배열은 가능하지만, 배열과 다른 요소가 섞이는 것은 불가능 합니다.

3. React.PropsWithChildren
type PropsWithChildren<P = unknown> = P & {
children?: ReactNode | undefined;
}
PropsWithChildren
타입은 위와 같이 옵셔널한 타입입니다.
만일 children
이 필수가 되는 컴포넌트에 경우에는 적합하지 않을 수 있습니다.

4. React.ReactNode
React.ReactNode
는 가장 광범위하게 사용이 가능한 타입입니다.String
, Number
, boolean
, Null
, Undefined
등의 Primitives
, 원시타입과React Elements
, React Fragments
등등 모든것을 받아들입니다.

참고
리액트 공식문서 - props.children
[React] React 컴포넌트(children) 타이핑하기
React children with typescript. 리액트 children 컴포넌트 타이핑
ReactNode, ReactChild, ReactElement 타입 비교
'TypeScript' 카테고리의 다른 글
[TypeScript] React.FC에 사용에 대해 생각해보기 (0) | 2023.03.30 |
---|---|
[Vite, TypeScript] Vite + 타입스크립트 환경에서 절대 경로 설정하기! (0) | 2023.03.21 |
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #7 - 마무리 (0) | 2023.03.03 |
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #6 - Bullet & Meteor (0) | 2023.02.27 |
[TypeScript] JavaScript 슈팅게임에 TypeScript 적용하기! #5 - DOM 조작에 대한 Type Narrowing (0) | 2023.02.25 |