ABOUT ME

Today
Yesterday
Total
  • [TS] 타입 시스템, 유니언과 리터럴
    codeStates front-end/Typescript 2023. 3. 6. 17:43
    반응형

    목차

     

     

    📌  타입 시스템

     

     

    📍 타입의 종류

     

    🔗  타입스크립트의 기본 윈시 타입

     

    null
    undefined
    boolean
    string
    number
    bigint
    symbol

     

    🔗 할당가능성

     

    함수 호출이나 변수에 값을 제공할 수 있는지 여부를 확인하는 것

     

    'Type... is not assignable to type ...' // 할당가능성 오류

     

    🔗 타입 에너테이션

     

    초기 다입을 유추할 수 없는 변수는 진화하는 any

     

     

    let rocker; // 진화하는 any
    
    rocket = "John" // 타입 : string

     

     

     

    📍 유니언과 리터럴

     

    유니언 : 값에 허용된 타입을 두 개 이상의 가능한 타입으로 확장하는 것

    리터럴 : 값에 허용된 타입이 하나 이상의 가능한 타입이 되지 않도록 좁히는 것

     

    🔗유니업 타입

     

    let mathematicain = Math.random() > 0.5
    	? undefined
    	: "Math Goldberg";

     

    👉🏻 mathematicain은 undefined 이거나 String일 수 있다.

    이와 같이 이거 혹은 저거 타입을 유니언이라고 한다.

     

    let thinker : string | null; // 연산자를 이용해 유니언 타입을 나타냄
    
    if (Math.random() > 0.5){
    	thinker = "~~~"
    }

     

    🔗 유니언 속성

     

    값이 유니언 타입일 때 유니언으로 선언한 모든 가능한 타입에 존재하는 멤버 속성에만 접근할 수 있다.

    예를 들어 number | string 일 경우 toString() 사용 가능하나, toUpperCase(), toFixed() 사용 불가

    toUpperCase()는 number 타입에 없고, toFixed()는 string 타입이 없기 때문이다.

     

     

    🔗 내로잉

     

    값이 정의, 선언 혹은 이전에 유추된 것보다 더 구체적인 타입임을 코드에서 유추하는 것

    타입을 좁히는데 사용할 수 있는 논리적 검사를 타입가드라고 한다.

     

    let admiral : number | string;
    admiral = "Grace Hopper";
    
    admiral.toUpperCase(); // ok : string
    admiral.toFixed(); // Error why? type 'string' X

     

    조건 검사를 통한 내로잉

     

    if문을 통해 변수의 값을 좁히는 방법

     

    let scientist = Math.random() > 0.5
    	? "Rosalind Franklin"
        : 51;
        
    if (scientist === "Rosalind Franklin"){
    	scientist.toUpperCase(); // ok
    }
    
    scientist.toUpperCase(); // Error

     

     

    typeof 검사를 통한 내로잉

     

    typeof 연산자를 사용하여 타입을 좁히는 방법

     

     

    let scientist = Math.random() > 0.5
    	? "Rosalind Franklin"
        : 51;
        
    if (typeof scientist === "string"){
    	scientist.toUpperCase(); // ok : string
    }

     

    참 검사를 통한 내로잉

     

    참 또는 truthy는 &&연산자 또는 if문처럼 boolean문맥에서 true로 간주된다

    JS 👉🏻 false,0, -0, 0n, null, undefined, NaN처럼 falsey로 정의된 값을 제외한 모든 값은 모두 참

    TS 👉🏻잠재적인 값 중 truthy로 확인된 일부에 한에서만 타입을 좁힐 수 있다

     

    let scientist = Math.random() > 0.5
    	? "Rosalind Franklin"
        : undefined;
        
        if (scientist) {
        	scientist.toUpperCase(); // ok
        }
        
        scientist.toUpperCase(); // Error
        
    geneticist && geneticist.toUpperCase(); // ok : string | undefined
    geneticist?.toUpperCase(); // ok : String | undefined

     

    🔗 리터럴 타입

     

    원시 타입 값 중 어떤 것이 아닌 특정 원싯값으로 알려진 타입이 리터럴 타입

    문자열 중에서도 string 타입은 존재할  수 있는 모든 가능한 문자열의 집합

    그 중에서 "~~"명시한다면 하나의 문자열만을 나타냅니다

     

    리터럴 할당 가능성

     

    let specificallAda: "Ada";
    specificallAda = "Ada"; // ok
    // specificallAda은 Ada로 선언했으므로 Ada 할당은 가능하나 다른 값으론 할당 불가
    specificallAda = "Byron"; // Error
    
    // string 타입에 값 할당 x
    let someString = "";
    specificallAda = someString; //Error
    
    // 그러나 타입스크립트에선 타입 ":)"의 값,":)"는 someString 변수에 할당 가능
    
    let someString = ":)";
    specificallAda = someString; // ok

     

    엄격한 null 검사

     

    리터럴로 좁혀진 유니언의 힘은 타입스크립트에서 엄격한 null 검사라 부르는 타입 시스템 영역인

    "잠재적으로 정의되지 않은 undefined 값"으로 작업할 때 특히 두드러진다

     

    십억 달러의 실수

     

    "잠재적으로 정의되지 않은 undefined 값"으로 작업

    십억 달러의 실수는 다른 타입이 필요한 위치에서 null값을 사용하도록 허용하는 많은 타입 시스템을

    가리키는 업계 용어이다

     

    const firstName : string = null;

     

    엄격한  null 검사를 활성해야만 코드가 null 또는 undefined 값으로 인한 오류로부터 안전한지 여부 파악 가능

     

     

    초깃값이 없는 변수

     

    JS의 초깃값 👉🏻 undefined

    🤔 undefined를 포함하지 않는 타입으로 변수를 선언한 다음 값을 할당하기 전에 사용하려고 한다면? Error

     

    undefined가 포함 되어 있는 경우에는 오류 x

     

    let mathematicain: string | undefined;
    
    mathematicain?.length; //ok
    
    mathematicain = "Mark Goldberg";
    mathematicain.length; //ok

     

    🔗 타입 별칭

    재사용하는 타입에 더 쉬운 이름을 할당하는 타입 별칭이 있다

     

    // type MyName = ...;
    
    type data = boolean | number | string | null | undefined;
    
    let data1 : data;
    let data2 : data;
    let data3 : data;
    
    // 타입 별칭 결합도 가능하다
    
    type Id = number | string;
    // IdMabe -> number | string | undefined | null
    type IdMaybe = Id | undefined | null;

     

    반응형

    'codeStates front-end > Typescript' 카테고리의 다른 글

    [TS] 클래스  (0) 2023.03.20
    [TS] 인터페이스  (0) 2023.03.12
    [TS] 배열과 튜플  (0) 2023.03.12
    [TS] 함수  (0) 2023.03.12
    [TS] 객체  (0) 2023.03.06

    댓글

Designed by Tistory.