반응형

# TypeScript 

## 연산자를 이용한 타입 정의

Union Type (유니온 타입).

  • union type : 특정 변수 또는 파라미터에 한가지 이상의 타입을 사용할 수 있도록하는 것. 
  • 키워드 : ' | ' 연산자 사용. (or 개념)
function logMessage(value: string | number) {
    console.log(value);
}

logMessage('hello');
logMessage(100);

Union Type 장점.

  • 타입 가드 : 특정 타입으로 타입의 범위를 좁혀나가는 (필터링 하는) 과정.
var seho: string | number | boolean;
function logMessage(value: string | number) {
    if (typeof value == 'number') {	// 타입 가드.
        value.toLocaleString();
    }

    if (typeof value == 'string') {	// 타입 가드.
        value.toString();
    }

    throw new TypeError('value must be string or number');
}

logMessage('hello');
logMessage(100);

Union Type 특징.

  • 구조체가 union type이 되면 타입의 공통된 속성만 접근 가능.
interface Developer {
    name: string;
    skill: string;
}

interface Person {
    name: string;
    age: number;
}

function askSomeone(someone: Developer | Person) {
    someone.name    // union type으로 구조체 여러개 사용한 경우, 공통 속성만 접근 가능.
    //someone.skill   // 불가.
    //someone.age     // 불가.
}

Intersection Type (인터섹션 타입).

  • 키워드 : ' & ' 연산자 사용. (and 개념)
interface Developer {
    name: string;
    skill: string;
}

interface Person {
    name: string;
    age: number;
}

var seho: string | number | boolean;
var capt: string & number & boolean;    // 불가능.

function askSomeone2(someone: Developer & Person) {
    someone.name    // 가능.
    someone.skill   // 가능.
    someone.age     // 가능.
}

유니온 타입과 인터섹션 타입의 차이점.

interface Developer {
    name: string;
    skill: string;
}

interface Person {
    name: string;
    age: number;
}

function askSomeone3(someone: Developer | Person) {
    
}

askSomeone3({name:'디벨로퍼', skill: '웹 개발'});   // Developer or Person 속성을 가져야함.
askSomeone3({name: 'abc', age:100});


function askSomeone4(someone: Developer & Person) { // 두 개 타입의 합집합에 해당하는 새로운 타입을 만들게 됨. 
    
}

askSomeone4({name:'디벨로퍼', skill: '웹 개발', age: 100}); // Developer,Person 속성 모두 가져야함.
반응형

+ Recent posts