본문 바로가기

Develop Log/TypeScript

TypeScript의 타입 연산자 알아보기

반응형

TypeScript 타입 연산자

TypeScript는 JavaScript에 정적 타입 시스템을 추가하여, 개발 시 컴파일 타임에서 오류를 쉽게 찾을 수 있게 해준다.

이러한 기능 중 하나가 강력한 타입 연산자들인데, 이번엔 이 타입 연산자에 대해서 정리해보려고 한다.

 

타입 연산자

TypeScript의 타입 연산자는 타입을 다루고 조작하기 위해 사용되는 연산자이다. TypeScript는 정적 타입을 지원하기 때문에 변수, 매개변수, 함수 등에 타입 정보를 명시하거나 추론할 수 있도록 해주는데, 이러한 타입 연산자를 사용하면 타입을 보다 정교하게 다룰 수 있다.

 

주로 사용되는 연산자

typeof

  • JavaScript에서, typeof는 런타임에 변수의 타입을 가져오는 연산자.
  • TypeScript에서, typeof는 타입 컨텍스트에서 사용될 때 해당 값의 타입을 가져오는 연산자로 동작한다.
let person = {
  name: "Alice",
  age: 30
};

type PersonType = typeof person; 
// type PersonType = {
//     name: string;
//     age: number;
// }

 

keyof

  • keyof 연산자는 객체 타입의 모든 키를 문자열 유니온 타입으로 가져온다.
  •  PersonKeys 타입은 "name" | "age"로 정의되며, PersonKeys로 정의된 변수에는 "name" 또는 "age"만 할당할 수 있다.
type Person = {
  name: string;
  age: number;
};

type PersonKeys = keyof Person; // "name" | "age"

 

in

  • 타입의 키를 반복하는 데 사용된다.
type Keys = 'option1' | 'option2';
type Flags = { [K in Keys]: boolean };  // { option1: boolean, option2: boolean }

 

extends

  • 조건적 타입을 생성할 때 사용된다.
type IsString<T> = T extends string ? true : false;
type X = IsString<'hello'>;  // true
type Y = IsString<number>;   // false

 

infer

  • 조건적 타입의 내부에서 타입을 추론하는 데 사용된다.
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;

 

readonly

  • 객체의 모든 속성을 읽기 전용으로 만들어준다.
type Readonly<T> = {
    readonly [P in keyof T]: T[P];
};

 

never

  • never 타입은 절대 발생할 수 없는 값을 나타낸다. 주로 조건 타입에서 특정 조건이 거짓일 때 사용된다.
type ExcludeString<T> = T extends string ? never : T;

type Result = ExcludeString<string | number | boolean>; 
// number | boolean

 

instanceof

  • 특정 클래스의 인스턴스 여부를 확인합니다.
class Car {}
const myCar = new Car();
if (myCar instanceof Car) {
  // myCar는 Car 클래스의 인스턴스.
}

 

as

  • 타입 단언을 통해 특정 값의 타입을 강제로 지정해준다.
const userInput: 'Hello' = "Hello";
const inputLength = (userInput as string).length; // 타입 단언으로 문자열 타입으로 변환

 

정리

TypeScript의 타입 연산자들은 코드의 타입 안정성을 높이고, 다양한 상황에서 유연한 타입 정의를 가능하게 하며, 이 연산자들을 활용하면 코드의 복잡성을 줄이고 오류를 사전에 방지하는 데 큰 도움이 된다.

반응형

'Develop Log > TypeScript' 카테고리의 다른 글

TypeScript의 타입 알아보기  (0) 2023.07.31
TypeScript 알아보기 - TypeScript란?  (0) 2023.07.30