타입스크립트에서 타입을 변환하는 방법은 무엇인가요?
_____타입 변환은 변수나 값의 타입을 다른 타입으로 명시적으로 또는 암묵적으로 변경하는 것을 의미합니다. 타입스크립트에서는 주로 '형변환(casting)' 또는 '타입 단언(type assertion)'이라고 부릅니다.
---
Q2: 타입스크립트에서 타입 변환(형변환)을 하는 기본 문법은 무엇인가요?
두 가지 주요 문법이 있습니다.
- 꺾쇠괄호(Angle-bracket) 문법:
```typescript
let someValue: any = "this is a string";
let strLength: number = (
```
- as 키워드 문법:
```typescript
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
```
---
Q3: 꺾쇠괄호 문법과 as 키워드 문법의 차이점은 무엇인가요?
- 기능상 동일하며, 타입스크립트 컴파일러에게 '이 값은 이 타입이다'라고 단언하는 역할을 합니다.
- JSX를 사용하는 환경(React)에서는 꺾쇠괄호 문법을 사용할 수 없으므로 as 키워드가 권장됩니다.
- as 키워드는 더 명확하고 읽기 쉽다는 장점이 있습니다.
---
Q4: 타입 단언(type assertion)이 타입 변환과 동일한가요?
엄밀히 말하면 '타입 단언'은 컴파일러에게 타입 정보를 알려주는 것이지 런타임에서 실제 형 변환을 수행하지 않습니다. 예를 들어, 숫자를 문자열로 바꾸려면 별도의 런타임 변환이 필요합니다.
---
Q5: 타입 단언 없이 런타임에서 값의 타입을 변환하려면 어떻게 하나요?
JavaScript의 기본 변환 함수를 사용해야 합니다. 예:
```typescript
let numStr: string = "123";
let num: number = Number(numStr); // 문자열을 숫자로 변환
let str: string = num.toString(); // 숫자를 문자열로 변환
```
---
Q6: 어떤 상황에서 타입 단언을 사용해야 하나요?
- 컴파일러가 타입 정보를 제대로 추론하지 못할 때(예: any 타입, 복잡한 타입 조합 등)
- 외부 라이브러리와의 호환 등에서 타입 체크를 우회할 때
---
Q7: 타입스크립트에서 강제로 타입 변환(casting)할 수 있나요?
타입스크립트는 타입 안전성을 추구하지만, 타입 단언을 통해 강제 변환이 가능합니다. 예:
```typescript
let value: any = "hello";
let len: number = (value as string).length;
```
---
Q8: 타입 변환 시 조심해야 할 점은 무엇인가요?
- 단언한 타입이 실제값과 다르면 런타임 오류 발생 가능
- 타입 단언은 컴파일러에게만 영향을 주므로, 런타임 변환은 별도로 구현해야 함
- 가능한 타입 단언을 최소화하고 타입을 최대한 정확히 지정하는 것이 좋음
---
Q9: 유니언 타입에서 특정 타입으로 변환하려면 어떻게 하나요?
예:
```typescript
type A = string | number;
let value: A = "hello";
if (typeof value === "string") {
let strLen = (value as string).length;
}
```
---
Q10: 객체 타입 간 변환은 어떻게 하나요?
타입 단언으로 변환할 수 있으나, 완전히 다른 구조일 경우 주의해야 합니다. 예:
```typescript
interface A { a: number; }
interface B { b: string; }
let objA: A = { a: 10 };
let objB = objA as unknown as B; // 이중 단언은 최후의 수단
```
---
요약하면, 타입스크립트에서 타입 변환은 주로 타입 단언(as, <>)을 사용하며, 런타임 타입 변환은 JavaScript 표준 함수로 별도 처리해야 합니다. 실제 값과 타입 단언이 일치할 때 안전하게 사용 가능합니다.
작성자:
정다빈 [비회원]
| 작성일자: 1년 전
2024-09-10 05:32:13
조회수: 156 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 156 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.