중급 프로젝트에서 배포를 담당하면서 여러 타입 에러들을 바로 잡았다. 그럼에도 헷갈리는 타입들은 계속 헷갈리므로 정리를 좀 해보려고 한다. 내용은 계속 추가할 예정이다.
const value: string = router.query.value as string;
export interface ItemData {
item: {
shop: {
item: {
id: string;
name: string;
imageUrl: string;
address1: string;
address2: string;
originalHourlyPay: number;
};
};
id: string;
startsAt: string;
workhour: number;
hourlyPay: number;
closed: boolean;
};
}
data.items.map((item: ItemData) => (
export type JwtDecode = {
userId?: string;
};
const user =
typeof window !== 'undefined' ? localStorage.getItem('user') : '';
const token =
typeof window !== 'undefined' ? localStorage.getItem('token') : '';
const decodedToken = token ? jwtDecode<JwtDecode>(token) : null;
const userId = decodedToken?.userId || '';
interface FilterCalendarProps {
selected: Date | undefined;
onChange: (date: Date) => void;
}
타입 에러가 뜰 때 에러메시지를 잘 봐야한다. 에러메시지에 답이 있다. 가끔 운이 좋으면 자동으로 고쳐주기도 한다.
자주 쓰는 데 타입 형식이 긴 것들을 새로운 타입명으로 지정해줄 수 있다. 이렇게 하면 쓰는데 편하고, 개발 속도가 빨라진다는 장점이 있다. 반면, 다른 개발자가 봤을 때 코드를 이해하기 어려워진다는 단점이 있다.
export type SetState<T> = React.Dispatch<React.SetStateAction<T>>;
post: <T>(shop_id: string, body: T) => {
const headers = {
Authorization: `Bearer ${localStorage.getItem('token')}`,
};
return axiosInstance.post<T>(`/shops/${shop_id}/notices`, body, {
headers,
});
},