본문 바로가기
FrontEnd

[Typescript] satisfies

by 수비두비 2024. 11. 20.

Satisfies 는 무엇인가?

satisfies는 TypeScript 4.9에서 추가된 새로운 연산자입니다. 일반적으로 TypeScript에서 객체의 타입을 선언할 때, 객체의 키와 값의 타입을 명시적으로 지정합니다. 그러나 이 방식은 객체의 키가 정확히 일치해야 하며, 확장성이 떨어질 수 있습니다. satisfies 연산자를 사용하면 이러한 제약을 완화할 수 있습니다.

사용 차이

 

예시 1: 일반적인 타입 선언 사용

type OperationFn = (left: number, right: number) => number
type Operator = '+' | '-' | '*' | '/' // key의 타입을 지정 해주어야함

const operations: Record<Operator, OperationFn> = {
    '+': (left, right) => left + right,
    '-': (left, right) => left - right,
    '*': (left, right) => left * right,
    '/': (left, right) => left / right,
}

 

 

예시 2: satisfies 연산자 사용

type OperationFn = (left: number, right: number) => number

const operations = {
    '+': (left, right) => left + right,
    '-': (left, right) => left - right,
    '*': (left, right) => left * right,
    '/': (left, right) => left / right,
} satisfies Record<string, OperationFn>

 

언제 사용해야 할까?

- 속성 이름이 중요하지 않을 때

 

어쩌면 속성 이름이 정확히 일치하는지는 신경 쓰지 않더라도, 각 속성의 타입에는 신경을 쓸 수 있습니다. 이 경우, 객체의 모든 속성 값이 특정 타입을 준수하도록 보장할 수도 있습니다.

 

type ValidationFn = (value: string) => boolean;

const validators = {
  isEmail: (value) => /@\w+\.\w+/.test(value),
  isPhoneNumber: (value) => /^\d{10,11}$/.test(value),
  customValidator: (value) => value.startsWith('custom'),
} satisfies Record<string, ValidationFn>;
 

댓글