- React 프로젝트 -> TS + React로 변경
$ npm install -D typescript @types/react @types/react-dom
참고 - vite 프로젝트 생성 시 Typescript 선택 시 자동으로 생성됨
ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(<App />);
/src/types 폴더 생성해서 타입들만 모아놓기 (.ts)
export interface PokemonData {
count: number;
next: string | null;
previous: string | null;
results: PokemonNameAndUrl[];
}
export interface PokemonNameAndUrl {
name: string;
url: string;
}
State
에 타입 지정하기const [allPokemons, setAllPokemons] = useState([]); // error
const [allPokemons, setAllPokemons] = <PokemonNameAndUrl[]>useState([]); // OK
const response = await axios.get<PokemonData>(url);
params
에 타입 지정하기const filterDisplayedPokemonData = (
allPokemonsData: PokemonNameAndUrl[],
displayedPokemons: PokemonNameAndUrl[] = []
) => {
...
}
map params
에 타입 지정하기{displayedPokemons.map(({url, name}: PokemonNameAndUrl) => ( ... ))}
setState
에 타입 지정하기setState: React.Dispatch<React.SetStateAction<number>>;
그 외 React에서 어떻게 TypeScript를 사용하는지는
React-TypeScript-CheatSheet에 잘 나와있으니 참조!
interface ComponentProps {
props1: string[],
props2: React.Dispatch<React.SetStateAction<string>>
}
const Component = ({ props1, props2 }: ComponentProps) => {
...
}
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
...
}
const newSprites = {...sprites};
(Object.keys(newSprites) as (keyof typeof newSprites)[]).forEach((key => {
...
})
type Point = {x: number, y:number};
type P = keyof Point; // "x" | "y"
✅ 타입 단언 (as)
- TypeScript보다 어떤 값의 타입을 보다 명확하게 알고 있을 때 활용
- 타입 선언(:type)과는 다름.
- 즉, 타입 단언은 강제로 타입을 지정했으니 체크를 하지 않음.
const getDescription = async (id: number): Promise<string> => {
...
return descriptions;
}
const varRef = useRef<number>(0);
const ref = useRef<HTMLDivElement>(null);
const inputRef = useRef<HTMLInputElement>(null);
...
return(
<div ref={ref}></div>
)
if (ref.current) { // type guard
ref.current.style.width = '100%'
}
const initialUserData = localStorage.getItem('userData') ? JSON.parse(localStorage.getItem('userData')) : null;
const [userData, setUserData] = useState<User | null>(initialUserData);
uuid
- 유니크한 아이디를 생성하는 모듈.
$ npm install uuid
import { v4 } from 'uuid';
.d.ts
선언 파일을 생성해야 함.declare module 'uuid' {
const v4: () => string;
export { v4 };
}
/// <refrence path=""/>
/// <reference path="./main.d.ts" />
$ npm install -D @types/{모듈명}
참고 - npm install uuid && npm install -D @types/uuid 둘 다 해야 함.
/src/utils/storage.ts 파일 생성
const storage = {
set: (key: string, value: any) => {
localStorage.setItem(key, JSON.stringify(value));
},
get: <T>(key: string, defaultValue?: T): T => {
const value = localStorage.getItem(key);
return (value ? JSON.parse(value) : defaultValue) as T;
},
remove: (key: string) => {
localStorage.removeItem(key)
}
}