타입스크립트로 리팩토링 타임어택
스파르타 강의를 다 들었지만 활용예시는 부족해서
유튜브와 유데미 강의를 참고해서 리팩토링을 했다.
처음부터 다시 깔아서 한게 아니라, 파일명을 바꿔주고
npm install typescript
npx tsc --init (tsconfig.json 생성)
명령어를 넣어주었다.
새로 알게 된 내용
그래서 그런지 tsconfig.json에 주석이 많고 기본 설정이 이상하게 되어있는 것 처럼 보였다.
유데미 강의에서 tsconfig.json을 쓰는 법도 알려주는 것 같던데 강의를 봐야겠다.
제천 튜터님이 주석 처리 되어있던 jsx를 주석 풀고 react-jsx로 값을 넣어줘야 오류들을 막을 수 있다고 하셨다.
// "jsx": "preserve"
"jsx": "react-jsx"
(5) Todo List in ReactJS using TypeScript Tutorial - YouTube
children props의 타입은 ReactNode
interface에서 children 키를 구조분해 할당해서 꺼내서 쓰면 된다.
import { ReactNode } from "react";
interface Props {
children: ReactNode;
}
const Footer = ({ children }: Props) => {
return <div>{children} </div>;
};
export default Footer;
useState의 initialState에 타입을 지정해주는 법
const [toDoList, setToDoList] = useState<Itodo[]>([]);
const [title, setTitle] = useState<string>("");
써본 이벤트 타입 2가지
FormEvent
ChangeEvent
const addToDo = (event: FormEvent): void => {
event.preventDefault();}
const onChangeTitleHandler = (e: ChangeEvent<HTMLInputElement>) => {
setTitle(e.target.value);
};
map해줄 때도 타입을 넣어줘야하는데 안 넣어준 경우에도 오류가 나지는 않았다. todoList에 initialState로 Itodo[]로 넣어놔서 그런건가?
자주 쓰는 인터페이스는 파일을 따로 만들어서 export 해서 가져다가 쓴다.
//interfaces.ts
export interface Itodo {
id: number;
title: string;
body: string;
isDone: Boolean;
}
Props로 하위 컴포넌트로 넘겨줄 때 interface로 하나하나의 타입을 지정해주어야한다.
함수에 매개변수 타입까지 (이것을 빼먹어서 오류가 났었다)
함수에서 return값이 없다면 void타입
interface Props {
title: string;
body: string;
onChangeTitleHandler(e: ChangeEvent<HTMLInputElement>): void;
onChangeBodyHandler(e: ChangeEvent<HTMLInputElement>): void;
addToDo(event: FormEvent): void;
}
숙련 과제를 리팩토링하는 팀원분의 코드를 같이 보면서 검색해봤는데, redux 를 썼을 때 ts로 바꿔주면서 신경써줘야하는 부분이 좀 있었다.
https://velog.io/@velopert/use-typescript-and-redux-like-a-pro
문제가 발생한 것
다른 것을 다 리팩토링하고나서 index.js를 빼먹었다는 것을 깨달아 index.ts 형식으로 바꿔주었는데 오류가 많이 났다.
왜 그렇지?
//index.ts
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
const root = ReactDOM.createRoot(
document.getElementById("root") as HTMLElement
);
root.render(
<React.StrictMode>
<App />
</React.StrictMode>
);
App 컴포넌트에는 FC를 붙였지만 다른 컴포넌트에는 붙이지 않았고 붙이면 오류가 났다. 근데 왜 그래야하는지 모른다.
'개발자 되는 중 > TIL&WIL' 카테고리의 다른 글
내배캠 TIL 2023.01.27 (0) | 2023.01.25 |
---|---|
내배캠 TIL 2023.01.19 (0) | 2023.01.19 |
내배캠 TIL 2023.01.17 (0) | 2023.01.17 |
내배캠 TIL 2023.01.16 (0) | 2023.01.16 |
내배캠 WIL 2023.01 2주차 (0) | 2023.01.16 |