TypeScript - object Type 3

lbr·2022년 7월 15일

never

일반적으로 return 에 사용됩니다.

첫번째 경우

// Function returning never must have unreachable end point
function error(message: string): never {
  throw new Error(message);

}
  • throw를 하면서 이 함수 밑으로는 더이상 진행되지 않아 return 되지 않으므로 이런 경우에 never 를 사용할 수 있습니다.

두번째 경우

  • error라는 함수를 사용하면서 return을 하는 경우에도 TypeScriptnever라고 추론합니다.

세번째 경우

// Function returning never must have unreachable end point
function infiniteLoop(): never {
    while (true) {
    }
}
  • 무한루프상태이면 함수가 진행되지 않아 return 되지 않기 때문에 never 지정이 가능합니다.

never의 특징

let a: string = 'hello';

if (typeof a !== 'string') {
    let b: never = a; // 여기서 a는 never타입이 됩니다.
}
  • string 타입인 a는 typeof 연산자를 만나 string 타입이 아닐 경우가 되었으므로 어느 타입도 허용될 수 없는 상태가 되었습니다. 어느 값도 들어갈 수 없기 때문에 타입이 never 가 되었습니다.
type Indexable<T> = T extends string ? T & { [index: string]: any } : never;
  • 조건부 타입에서 활용될 수 있습니다.
  • never를 활용하여 <T>에 잘못된 타입을 넣는 실수를 막는 용도로 쓰입니다.

기타

typeof의 활용

declare const a: string | number;

if(typeof a !== "string") {
  a; // number 타입
}
  • 변수 a는 stringnumber 타입에서 typeof를 통하여 number타입만 허용하는 상황을 만들었습니다.

void

어떤 타입도 가지지 않는 빈 상태를 의미합니다.

  • undefined를 리턴하는 상황에서 사용합니다.
  • 함수의 반환타입으로 사용됩니다.

  • 위처럼 특별한 반환값이 없는 함수에서 TypeScript는 반환타입을 void로 추론합니다.

  • 명시적으로 return을 작성하고 아무값도 반환하지 않는 경우에도 void로 추론합니다.
function returnVoid(message: string): void {
  console.log(message);

  return undefined;
}
  • undefined만 유일하게 void에 할당이 가능합니다.

return 타입에 void를 기재하여 이 함수의 반환값을 이용하여 아무것도 하지 않겠다 라는 것을 명시적으로 표현하고, 이용을 막는 행위라고 볼 수 있겠습니다.

profile
ro

0개의 댓글