[TypeScript] Literal Type, Type alias, void, 함수, Unknown, Never 본문

Web/TypeScript

[TypeScript] Literal Type, Type alias, void, 함수, Unknown, Never

미니모아 2022. 8. 10. 18:37
반응형

Literal Type

특정한 값을 변수의 타입으로 지정하는 것을 리터럴 타입이라고 한다.

const foo:string;

string , number 외에 특정한 값을 타입으로 지정할 수도 있으며 union 타입과도 같이 사용할 수 있다.

resultConversion: 'as-number' | 'as-text' 

Type alias

사용하고자 하는 타입을 별칭으로 지정하여 재사용할 수 있다.

type ConversionDescriptor = 'as-number' | 'as-text';

타입 객체를 생성하는 것도 가능하다.

type User = {name: string; age: number};

function greet(user:User) {
    console.log(`Hi I'm ${user.name}`);
}

function isOlder(user: User, checkAge: number) {
    return checkAge > user.age;
}

void

반환문이 없을 때 반환 타입은 void로 설정된다.

undefined 은 실제 값을 반환 하지 않는 타입으로서 따로 존재한다. 두 함수의 반환 값은 다르다.

function printResult(num: number): void {
  console.log('Result: ' + num);
}

function printResult(num: number): undefined {
  console.log('Result: ' + num);
  return;
}

함수 타입

인수와 반환 값의 타입을 지정할 수 있다.

let combineValues: (a: number, b: number) => number;

콜백 함수 타입


function addAndHandle(n1: number, n2: number, cb:(num: number) => void) {
  const result = n1 + n2;
  cb(result);
}

addAndHandle(10, 20, (result) => {
  console.log(result);
});

콜백 함수는 전달되는 인수가 반환 값을 기대하지 않는 경우에도 값을 반환할 수 있다. 따라서 아래 코드는 컴파일을 통과한다.

function addAndHandle(n1: number, n2: number, cb:(num: number) => void) {
  const result = n1 + n2;
  cb(result);
}

addAndHandle(10, 20, (result) => {
  console.log(result);
  return result;
});

Unknown

any 처럼 모든 타입의 값을 저장할 수 있지만 타입이 고정된 다른 변수에 unknown 변수를 할당할 경우 추가적인 타입 체크가 필요하다. any보다 제한적이다.

let userInput: unknown;
let userName: string;

userInput = 5;
userInput = 'Max';

//userName = userInput;

if (typeof userInput === 'string') {
  userName = userInput;
}

Never

절대 값을 반환하지 않는 함수의 경우 해당 내용을 명시하기 위해 never 타입을 반환값으로 사용할 수 있다.

function generateError(messgae: string, code: number): never {
  //throw {message: messgae, errorCode: code};
  while(true){}
}

const result = generateError('An error occurred!', 500);
console.log(result);
반응형

'Web > TypeScript' 카테고리의 다른 글

[TypeScript] 고급타입  (0) 2022.08.24
[TypeScript] 인터페이스  (0) 2022.08.19
[TypeScript] 클래스  (0) 2022.08.17
[TypeScript] TypeScript 컴파일러  (0) 2022.08.12
Enum, Any, Union  (0) 2022.08.04
Comments