Generic는 언제 사용할까?

보통의 경우 타입유추를 할 수 있기 때문에 사용안해도 되지만.
상태가 null일수도있고 아닐수도있을경우, Generics을 사용하면좋다.
type Information = { name: string; description: string }; const [info, setInformation] = useState<Information | null>(null);
추가적으로 상태의 타입이 까다로운 구조를 가진 객체이거나 배열일 때는 Generics 를 명시하는 것이 좋습니다.
type Todo = { id: number; text: string; done: boolean }; const [todos, setTodos] = useState<Todo[]>([]);
배열인 경우에는 위와 같이 빈 배열만 넣었을 때 해당 배열이 어떤 타입으로 이루어진 배열인지 추론 할 수 없기 때문에 Generics 를 명시하셔야 합니다.
만약 Generics 를 사용하지 않는다면 다음과 같이 할 수도 있긴 하지만 코드가 별로 예쁘지 않습니다.
type Todo = { id: number; text: string; done: boolean }; const [todos, setTodos] = useState([] as Todo[]);
as 는 Type Assertion 이라는 문법인데요, 특정 값이 특정 타입이다라는 정보를 덮어 쓸 수 있는 문법입니다.
useState를 사용 할 때에는 useState<string> 과 같이 Generics 를 사용합니다.
useRef를 사용 할 땐 Generics 로 타입을 정합니다.