
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
npx create-react-app my-app --template typescript
✔ 컴포넌트 파일은 js가 아니라 tsx로 확장자를 사용해야한다.
일반 리액트와 크게 다른 점은 없지만 함수, 컴포넌트, state, props타입체크를 잘 해줘야 에러가 나지 않는다.
일반 변수, 함수 타입지정
JSX 타입지정
- 리액트에선 변수나 자료에 <div></div>같은 JSX요소를 담아서 쓸수있다.
JSX.Element라는 타입을 쓰면된다.let box :JSX.Element = <div></div>
let btn :JSX.Element = <button></button>
function component 타입지정
function App() {
return (
<div>안녕하세욥</div>
);
}
함수형태이므로 타입을 지정해주려면 파라미터와 return타입지정하면 된다.
type AppProps = {
name: string;
}
function App(props:AppProps) :JSX.Element{
return (
<div>안녕하세욥 {props.name}</div>
);
}
type ContainerProps = {
a: JSX.IntrinsicElements['h4'];
};
function Container (props: ContainerProps) {
return (
<div>{props.a}</div>
)
}
a라는
props자리에<h4>만 넣을 수 있게 타입쉴드를 씌워놓음
❗ 리액트 18버전이후로JSX.IntrinsicElements는props타입 넣을때만 사용가능
state 문법 사용시 타입지정
// 타입이 알아서 지정
const [user, setUser] = useState("kim");
state를 만들땐 자동으로 타입이 할당된다.
Generic문법을 사용하여 타입을 useState에 지정해줘도됨
const [user, setUser] = useState<string | null>('kim');
type assertion 문법 사용할 때
let code: any = 123;
let employeeCode = <number> code; // X
✔ 리액트에서는 꺾쇠대신 as문법을 사용한다.