반응형
1. 타입스크립트 리액트 시작하기(JS 프로젝트에서 마이그레이션)
1) 타입선언
npm i @types/node @types/react @types/react-dom @types/jest
2) tsconfig.json
{
"compilerOptions" : {
"target" : "ES5",
"module" : "CommonJS",
"strict" : true,
"allowJs" : true,
"esModuleInterop" : true,
"jsx" : "react-jsx"
},
"include" : ["src"]
}
3) 모든 js 파일을 jsx로
4) 각 파일의 에러 해결
2. 상태관리와 Props
// onChange 이벤트 타입
React.ChangeEvent<HTMLInputElement>
interface를 코드 여기저기에서 사용할 때 src 디렉토리 내에 types.ts 파일을 만들고 interface를 export 하는 방식을 사용하여 관리한다.
interface Props extends Todo {}
useState 대신 useReducer를 사용하는 방법도 있다.
type Action =
{
type: "CREATE",
data: {
id : number;
content: string,
},
} | { type: "DELETE", id: number};
funtion reducer(state: Todo[], action: Action) {
switch(action.type){
case "CREATE":{
return [...state,action.data];
}
case "DELETE":{
return state.filter((id) => it.id !== action.id);
}
}
...
const [todos, dispatch] = useReducer(reducer,[]);
const onClickAdd = (text: string) => {
dispatch({
type: "CREATE",
data: {
id : idRef.current++;
content: text,
},
});
}
const onClickDelete = (id: number) => {
dispatch({
type: "DELETE",
id: id,
});
}
3. Context API
// context 객체
export const TodoStateContext = React.createContext<Todo[] | null>(null);
// dispatch
export const TodoDispatchContext = React.createContext<{
onClickAdd: (text: string) => void;
onClickDelete: (id: number) => void;
} | null>(null);
// custom hook(타입 좁히기)
export function useTodoDispatch(){
const dispatch = useContext(TodoDispatchContext);
// dispatch가 객체타입 이거나 null 타입이라고 해두었으므로 타입 좁혀주기
if(!dispatch) = throw new Error("~~");
return dispatch;
}
// App.tsx return 문
return (
...
<TodoStateContext.Provider value={todos}
<TodoDispatchContext.Provider value={{
onClickAdd,
onClickDelete
}}>
...
// 사용(자식 컴포넌트 등)
const dispatch = useTodoDispatch();
const onClickButton = () => {
dispatch.onClickAdd(text);
setText("");
}
4. 외부 라이브러리 사용하기
TS 마크가 붙어있는 라이브러리는 명령어만으로 사용가능하지만 그렇지 않은 경우(lodash 등)는 타입 정보가 제공되지 않는다. 그럴 때는 DT 마크를 확인하고 그것을 눌러 타입 정보를 제공하는 라이브러리를 설치할 수 있다.
5. 타입스크립트 템플릿 소개
https://create-react-app.dev/docs/adding-typescript/
자동으로 CRA가 typescript 템플릿으로 실행된다.
반응형
'온라인 강의(유데미, 인프런 등) > 한 입 크기로 잘라먹는 타입스크립트(인프런)' 카테고리의 다른 글
[한 입 크기로 잘라먹는 타입스크립트] 유틸리티 타입 (0) | 2023.06.21 |
---|---|
[한 입 크기로 잘라먹는 타입스크립트] 조건부 타입 (0) | 2023.06.20 |
[한 입 크기로 잘라먹는 타입스크립트] 타입 조작하기 (0) | 2023.06.20 |
[한 입 크기로 잘라먹는 타입스크립트] 제네릭 (0) | 2023.06.19 |
[한 입 크기로 잘라먹는 타입스크립트] 인터페이스 (0) | 2023.06.19 |