일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 7526번
- 5014번
- node.js
- 16953번
- 알고리즘
- 2422번
- 1541번
- 16439번
- 타입스크립트 프로그래밍
- 정리
- 20365번
- 한윤정이 이탈리아에 가서 아이스크림을 사먹는데
- 17626번
- 자바스크립트
- 123만들기
- 나이트의이동
- 2503번
- 5427번
- 13913번
- 풀이
- 1926번
- 맥주마시면서걸어가기
- 토마토
- javascript
- 타입스크립트
- 20300번
- 1969번
- 백준
- 14940번
- 6593번
Archives
- Today
- Total
Sqsung DevLog
<타입스크립트 프로그래밍> 9장: 프론트엔드 프레임워크와 백엔드 프레임워크 정리 본문
9장: 프론트엔드 프레임워크와 백엔드 프레임워크
9-1. 프론트엔드 프레임워크
9-1-1. React
자바스크립트로 리액트를 사용하는 것보다 타입스크립트로 리액트를 사용하면 프론트엔드 개발팀의 생산성은 향상될 수 있다
tsconfig.json에 아래 내용을 추가하면 리액트 프로젝트에서
TSX
를 지원하게 된다{ "compilerOptions": { "jsx": "react" } }
내부적으로 타입스크립트는 TSX 타입을 넣고 뺄 수 있는 몇 가지 후크(hook)를 제공한다
TSX 타입들은 global.JSX 네임스페이스에 존재하는 특별한 타입으로, 이 네임스페이스를 참고하여 프로그램에 쓰인 TSX 타입 들이 올바른지 판단한다
리액트에서 컴포넌트(함수/클래스)는 프로퍼티 몇 개를 입력받아 TSX를 렌더링한다
import React from 'react'; // 💡FancyButton 컴포넌트에 전달할 수 있는 프로퍼티 집합 선언 type Props = { isDisabled?: boolean; size: 'Big' | 'Small'; text: string; /** * 💡 리액트는 DOM 이벤트들을 위한 고유의 래퍼 타입 집합을 제공함 * - 일반 DOM 이벤트 타입 대신 리액트의 이벤트 타입을 사용해야 함 */ onClick(event: React.MouseEvent<HTMLButtonElement>): void; }; export function FancyButton(props: Props) { const [toggled, setToggled] = React.useState(false); return <button className={'Size-' + props.size} disabled={props.isDisabled || false} onClick={e => { setToggled(!toggled); props.onClick(e); }} >{props.text}</button> }
위 예제처럼 렌더링 함수 컴포넌트에서 타입스크립트는 다음을 강제한다
- JSX 문법을 잘 지켜야 한다 (태그는 무조건 닫기, 태그명 오타 있으면 안됨)
<FancyButton />
을 인스턴스화할 때 필요한 모든 프로퍼티(size, text, onClick 및 선택형)를 FancyButton에 전달해야 하며, 프로퍼티는 모두 올바른 타입을 가져야 한다- 추가로 불필요한 프로퍼티는 전달하지 않아야 한다
'TypeScript' 카테고리의 다른 글
<타입스크립트 프로그래밍> 11장: 자바스크립트와 상호 동작 정리 (0) | 2023.06.16 |
---|---|
<타입스크립트 프로그래밍> 10장: Namespace.Modules 정리 (0) | 2023.06.16 |
<타입스크립트 프로그래밍> 8장: 비동기 프로그래밍, 동시성과 병렬성 정리 (0) | 2023.06.16 |
타입스크립트 interface와 type의 차이점 정리 (0) | 2023.06.08 |
<타입스크립트 프로그래밍> 7장: 에러 처리 - 정리 (0) | 2023.06.05 |