
JavaScript 언어를 사용하는 개발자라면 TypeScript를 한번쯤은 사용해본 경험이 있을겁니다. 또한 많은 개발자 분들이 TypeScript를 사용해 컴파일 타임에 에러를 잡고자 할탠데요.
이 타입스크립트를 사용하면서 회사에서 코드를 리뷰받다 보면 생각보다 아쉽게 사용하고 있단 느낌을 받았습니다. 꽤나 다양한 기능이 있고 다양한 부분에서 타입추론이 이루어지고 있었습니다.
그래서 오늘은 타입스크립트 알고 쓰자!! 라는 주제로 글을 써보려 합니다.
TypeScript의 가장 큰 강점 중 하나는 타입 추론입니다.
타입을 명시하지 않아도 TS가 알아서 타입을 "추측"해줍니다.
let x = 5; // x: number로 추론
let y = "hello"; // y: string으로 추론
function add(a = 1, b = 2) {
return a + b; // a, b: number로 추론
}
const arr = [1, "hello"]; // (number | string)[]
|)여러 타입 중 하나일 수 있음을 의미합니다.
function printId(id: string | number) {
console.log(id);
}
printId(123);
printId("abc");
&)여러 타입을 모두 만족해야 함을 의미합니다.
interface Person { name: string; }
interface Worker { company: string; }
type Employee = Person & Worker;
const e: Employee = { name: "Kim", company: "Naver" };
제네릭은 타입을 변수처럼 받아 재사용성을 높여줍니다.
function identity<T>(value: T): T {
return value;
}
identity<number>(10); // 10
identity<string>("hi"); // "hi"
조건부 타입은 타입에 따라 다른 타입을 반환합니다.
type IsString<T> = T extends string ? true : false;
type A = IsString<"hi">; // true
type B = IsString<123>; // false
infer 키워드를 활용하면 타입 내부에서 부분 타입을 추출할 수 있습니다.
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
type Foo = ReturnType<() => number>; // number
문자열 타입을 조합하거나 패턴을 엄격하게 제한할 수 있습니다.
type HttpMethod = "GET" | "POST";
type ApiRoute = `/api/${string}/${HttpMethod}`;
const route: ApiRoute = "/api/user/GET"; // OK
const wrong: ApiRoute = "/api/user/DELETE"; // Error
TypeScript는 다양한 내장 유틸리티 타입을 제공합니다.
interface User { name: string; age: number; }
type PartialUser = Partial<User>; // { name?: string; age?: number }
type ReadonlyUser = Readonly<User>; // { readonly name: string; readonly age: number }
satisfies는 값이 특정 타입을 만족하는지 컴파일 타임에만 체크합니다.
타입 단언(as)과 달리 실제 값의 리터럴 타입을 유지합니다.
const point = { x: 1, y: 2 } satisfies { x: number; y: number }; // OK
매핑 타입은 객체 타입의 각 속성을 일괄적으로 변환할 때 사용합니다.
type ReadonlyUser = {
readonly [K in keyof User]: User[K];
};
인덱스 접근 타입은 객체의 특정 속성 타입을 추출할 때 사용합니다.
type UserName = User['name']; // string
typeof, instanceof, 커스텀 타입 가드)function isString(val: any): val is string {
return typeof val === 'string';
}
타입스크립트는 단순히 타입을 붙이는 언어가 아니라
타입 자체로 로직을 설계하고 코드의 안정성을 극대화하는 도구입니다.
처음에는 어려울 수 있지만 컴파일 과정에서 에러를 잡아주고 타입 추론을 통해 자동 완성도 제공해 줘 잘쓰면 좋은 도구 입니다.
출처
https://www.heropy.dev/p/WhqSC8
https://wonsss.github.io/typescript/basic-typescript/
https://f-lab.kr/insight/understanding-typescript