1강 — 타입 기초
2024 DTC
| → / Space | 다음으로 |
| ← | 이전으로 |
| ↓ / ↑ | 같은 주제 안에서 단계 이동 |
| O | 전체 슬라이드 한눈에 보기 |
| F | 전체화면 |
아래쪽 화살표가 보이면 그 주제는 단계별로 이어집니다
interface 로 적는다
function add(a, b) {
return a + b;
}
add(1, 2);
add("1", "2");
add(1, 2)3add("1", "2")"12"여기서 문자열을 넣으면 어떻게 될까요?
function add(a: number, b: number) {
return a + b;
}
add("1", "2");
JavaScript에 타입을 더한 것
실행하기 전에 오류를 잡아준다
TypeScript를 써보려면
npm create vite@latest my-app
# 언어에서 TypeScript 선택
npm install
npm run dev
npx tsc --noEmit
일반 TypeScript
JSX 없음React 컴포넌트
JSX 있음값에 타입을 붙이려면
let name: string = "홍길동";
let age: number = 20;
let isMember: boolean = true;
let scores: number[] = [90, 85, 100];
string문자열number정수와 소수 모두booleantrue / falsenumber[]숫자 배열
let name = "홍길동";
let age = 20;
let scores = [90, 85, 100];
namestringagenumberscoresnumber[]타입을 안 쓰면 어떻게 될까요?
let age = 20;
age = "스무살";
변수: 타입 으로 붙인다함수의 입력과 출력을 정하려면
function add(a: number, b: number): number {
return a + b;
}
매개변수number, number반환값number
function greet(name: string, age?: number) {
if (age) return `${name} (${age})`;
return name;
}
greet("홍길동");
greet("홍길동", 20);
greet("홍길동")"홍길동"greet("홍길동", 20)"홍길동 (20)"
function log(msg: string): void {
console.log(msg);
}
void돌려주는 값 없음
const add = (a: number, b: number) => a + b;
add(a: number, b: number) => number객체의 모양을 적으려면
function print(
user: { name: string; age: number }
) {
console.log(user.name);
}
interface User {
name: string;
age: number;
}
function print(user: User) {
console.log(user.name);
}
interface User {
name: string;
age?: number; // 없어도 됨
readonly id: number; // 못 바꿈
}
name필수age?선택readonly id읽기 전용
const user: User = {
name: "홍길동",
nickname: "희도",
};
없는 속성을 넣으면 어떻게 될까요?
객체 모양
확장이 자연스럽다모든 타입
유니온도 가능객체는 interface, 나머지는 type — 정도로 시작하면 됩니다
여러 타입 중 하나를 표현하려면
let id: string | number;
id = "abc";
id = 123;
id = true;
type Status = "대기" | "진행" | "완료";
let s: Status = "진행";
let t: Status = "취소";
function print(id: string | number) {
console.log(id.toUpperCase());
}
유니온 타입에 문자열 메서드를 쓰면?
function print(id: string | number) {
if (typeof id === "string") {
console.log(id.toUpperCase());
} else {
console.log(id + 1);
}
}
if 안stringelse 안number타입을 모를 때는
let data: any = "문자열";
data.아무거나();
data.foo.bar.baz;
any를 쓰면 어떻게 될까요?
let data: unknown = "문자열";
data.toUpperCase();
let data: unknown = "문자열";
if (typeof data === "string") {
data.toUpperCase(); // 여기서는 된다
}
if 안stringany — 검사를 끈다. 쓰지 않는다unknown — 확인한 뒤에만 쓸 수 있다any 대신 unknown오늘 배운 것
| string number boolean | 기본 타입 |
| 타입 추론 | 안 쓰면 알아서 정해준다 |
| (a: T) => R | 함수의 입력과 출력 |
| interface | 객체 모양에 이름 붙이기 |
| A | B | 유니온. typeof로 좁힌다 |
| any / unknown | any는 금지, unknown을 쓴다 |
직접 만들어봅시다
.ts 로 옮기고 타입 붙이기interface Todo 를 만들고 할 일 배열 타입 정하기"대기" | "완료" 리터럴 유니온으로 만들기2강에서는 React에 붙입니다