자바스크립트의 모든 기능을 포함하면서 정적 타입을 지원하는 언어
코드의 양이 많을 때 생산성이 높다.
마이크로소프트에서 개발하고 꾸준하게 업데이트 버전이 나오고 있다. 자바스크립트 새로운 표준, 리액트 문법을 반영한다.
마이크로소프트에서 개발하고 있는 IDE: vscode과 찰떡궁합
특정 변수 또는 상수의 타입을 지정할 수 있다.
사전에 지정한 타입이 아닌 값을 설정하면 에러가 발생한다. (= 컴파일이 되지 않는다.)
let num = 1;
num += 1;
num = '문자열'; // error
const str: string = 'Tommy';
const numArr: number[] = [1, 2, 3];
const numArr: Array<number> = [1, 2, 3];
const strArr: string[] = ["tommy", "naeun"];
styArr.push(100); // error
let strUndefined: string | undefined = undefined; // 유니온타입: 문자열이거나 undefined
let cat: 'russian blue' | 'korean short hair' = 'russian blue';
cat = 'korean blue'; //error
첫 번째 원소에 값을 할당하지 않으면 자동으로 0이 할당된다.
각 원소에 숫자 또는 문자열을 할당할 수 있고, 값을 입력하지 않으면 이전 원소에서 1만큼 증가한 값이 할당된다.
열거형 타입은 객체이기 때문에 일반적인 객체처럼 다룰 수 있다.
- 원소의 이름과 값이 양방향 매핑되어 있어 값을 이용해서 이름을 가져올 수 있다.
- 원소에 문자열을 할당하는 경우에는 단방향으로 매핑된다.
enum Fruit {
Apple,
Banana = 5,
grape,
}
console.log(Fruit.Apple, Fruit.Banana, Fruit.Orange); // 0, 5, 6
console.log(Fruit[5]); // Banana
코드를 작성하는 과정에서 함수의 파라미터로 어떤 타입을 넣어야 하는지 바로 알 수 있고, 함수의 결과물을 명시할 수 있다.
void
never
function sumArr(numbers: number[]): number {
return numbers.reduce((acc, cur) => acc + cur, 0);
}
const total = sumArr([1, 2, 3, 4, 5])
클래스 또는 객체를 위한 타입을 지정할 때 사용되는 문법
interface Cat {
name: string;
age?: number; // 설정을 해도 되고 안해도 되는 값
}
/* 상속받기 전 인터페이스 선언방식
interface Person {
name: string;
age?: number;
sex: female;
}
*/
interface Person extends Cat {
sex: female;
}
const cat: Cat = {
name: 'Tommy',
age: 10
}
상속을 통해 확장이 필요하다면 인터페이스
type Cat = {
name: string;
age?: number
}
const cat: Cat = {
name: "tommy"
};
인터페이스로 표현할 수 없거나 유니온 또는 튜플을 사용해야 한다면 Type Alias
여러 종류의 타입에 대해 호환을 맞춰야 할 때 사용하는 문법
함수에서 Generics를 사용하면 파라미터로 다양한 타입을 넣을수도 있고, 타입 유추도 가능하다.
npx create-react-app ts-react-practice --template typescript
진행중인 프로젝트에 적용할 경우
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
tsc --init
tsconfig.json 생성
// tsconfig.json
{
"jsx": "react",
"outDir": "./dist", // 변환된 JSX코드(=컴파일 결과)를 모아놓는 폴더
}
// App.tsx
import React from 'react';
const App: React.FC = () => {
return <div className="App" />
}
export default App;
npx tsc
컴파일프로젝트 폴더에 tsconfig.json 파일이 있으면 타입스크립트 개발 환경이라고 인식한다.
touch tsconfig.json
npx next