[typescript] 타입 가드를 사용하여 가변성 문제 해결하기 예제 코드
타입스크립트에서는 타입 가드(Type Guards)를 사용하여 코드에서 발생할 수 있는 가변성 문제를 해결할 수 있습니다. 타입 가드는 런타임에 변수가 특정한 타입인지 확인하여 타입 안정성을 제공하는데 도움을 줍니다.
가변성 문제를 예제 코드를 통해 살펴보겠습니다.
// 가변성 문제가 발생하는 예제
function printAll(strs: string[] | number[]) {
for (let i = 0; i < strs.length; i++) {
console.log(strs[i].toUpperCase()); // Error: Property 'toUpperCase' does not exist on type 'string | number'
}
}
위 코드에서 strs
파라미터는 string
배열 또는 number
배열일 수 있습니다. 하지만 strs[i].toUpperCase()
코드에서는 toUpperCase
메서드를 호출하는데, string
배열이외의 타입이 되었을 경우 에러가 발생합니다.
이를 해결하기 위해 타입 가드를 사용하여 타입을 체크하는 함수를 작성해봅시다.
// 타입 가드를 사용하여 문제 해결
function isStringArray(strs: string[] | number[]): strs is string[] {
return typeof strs[0] === "string";
}
function printAll(strs: string[] | number[]) {
if (isStringArray(strs)) {
for (let i = 0; i < strs.length; i++) {
console.log(strs[i].toUpperCase()); // No Error
}
}
}
isStringArray
함수는 strs
가 string
배열인지 확인하여 boolean을 반환합니다. 이후 printAll
함수에서 isStringArray
를 통해 타입 체크를 한 후 string
배열에만 접근하여 에러가 발생하지 않도록 합니다.
이렇게 타입 가드를 사용하여 가변성 문제를 해결할 수 있습니다.
결론
타입 가드를 사용하여 가변성 문제를 해결할 수 있습니다. 타입 가드를 통해 더욱 안전하고 명확한 코드를 작성할 수 있습니다.
참고:
- https://www.typescriptlang.org/docs/handbook/advanced-types.html#user-defined-type-guards