Post

Narrowing & Assertion(타입 확정)

stringnumber 같은 union type 에는 일반적으로 조작을 못하게 막아놔서 에러가 발생합니다.
1
2
3
function narrFunction(x: number | string){
    return x + 1; // error
}

이를 해결할 수 있는 방법에 대해 알아보겠습니다.


📌 Narrowing

Narrowing은 실제로 선언된 타입들에 대해 더 구체적인 타입에 대해 처리하는 것으로,
각 타입에 대한 처리를 분명하게 해서 에러가 나지 않는 안전한 코드를 만드는 것입니다.

1
2
3
4
5
6
7
8
9
function narrFunction(x: number | string){
    if(typeof x === 'number'){
        return x + 1;
    }else if(typeof x === 'string'){
        return x + 1;
    }else{
        return 0
    };
}

조건문 if문과 typeof 를 이용하여 현재 파라미터의 타입을 검사해서 무엇이 실행되어야 하는지 정해주는 방법입니다.
typeof는 타입이 애매하면 안되기 때문에 그것을 막기 위함입니다.

📌 Assertion

as를 이용하여 타입을 덮어쓰는 방법입니다.
어떤 타입이 들어올지 확실할 때만 assertion을 사용해야합니다.

1
2
3
4
function narrFunction(x: number | string){
    return (x as number) + 1;
}
console.log(narrFunction(123));

변수명 as number 라고 쓰면, 변수를 number로 타입을 변경해줍니다.
union type 같은 복잡한 타입을 하나의 정확한 타입으로 줄이는 역할을 합니다.
실제 코드 실행 결과는 as가 있을 때나 없을 때나 동일합니다.


[Reference]

https://velog.io/@jinhengxi/Typescript-Narrowing-Assertion