지난 포스팅에서 Circle 컴포넌트의 props로 bgColor를 전달하지 않으면 오류가 뜹니다. bgColor가 required이기 때문입니다. 이번에는 props를 선택적이도록 만들어보겠습니다.
- Cicle.tsx
importstyledfrom"styled-components"
// Typescript에게 Container가 bgColor를 받을거라고 얘기해줌
interfaceContainerProps {
bgColor:string;
}
constContainer=styled.div<ContainerProps>`
width: 200px;
height: 200px;
border-radius: 100px;
background-color: ${props=>props.bgColor};
`;
interfaceCicleProps {
bgColor:string;
borderColor:string;
}
functionCircle({bgColor}:CicleProps) {
return<ContainerbgColor={bgColor}/>
}
exportdefaultCircle;
interfacePlayerShape {
name:string;
age:number;
}
#지난시간에 작성한 Cicle.tsx에 CicleProps에 borderColor를 추가했습니다.
- App.tsx
#Circle 컴포넌트에 아래와 같은 에러가 발생합니다. required인 borderColor를 전달하지 않아서입니다. borderColor를 전달하면 에러가 사라집니다.
- borderColor optional props로 만들기
borderColor를 optional props로 만들어서 선택적으로 사용할 수 있도록 해주겠습니다. interface에서 borderColor 뒤에 ?만 추가하면 됩니다. 그러면 borderColor는 string 혹은 undefined의 type을 가지게 된다고 타입스크립트가 알게됩니다. 이렇게 하면 App.tsx에서 error가 사라집니다.
아직도 Typescript가 error를 보내고 있습니다. Container에도 borderColor를 설정하겠습니다.
-> 타입스크립트가 Container styled 컴포넌트가 borderColor를 갖는 거 알게되어서 borderColor props에는 에러가 사라졌지만 CircleProps에서는 borderColor가 optional(string 혹은 undefined)하고 ContainerProps에서는 boderColor가 필수라는 것을 타입스크립트가 알고 있어서 에러를 알려주고 있습니다.