타입변환 및 타입단언
typescript를 사용하다보면 가장 빈번하게 만나는 에러 중에 하나가 다음과 같을 것입니다.
이것은 argument 의 타입(입력)과 assign(수신)되어야할 parameter의 타입이 맞지 않아서 발생합니다.
Argument of type 'number | { x: number; y: number; z: number; }' is not assignable to parameter of type 'Float32Array<ArrayBufferLike>'.
Type 'number' is not assignable to type 'Float32Array<ArrayBufferLike>'
각각의 예제를 보면서 타입변환 및 타입단언에 대해서 설명드리겠습니다.
타입변환
example 1
export interface Message {
type: number;
message: string;
}
let message:Message = {} // error
let message:Message = <Message>{} // OK (앞에 <> 을 이용하여 타입선언, <Float32Array<ArrayBufferLike>>)
example 2
let user: object = {idx: number, gender: 'm', name: 'pondol'}
user.name; // error
(<{name: string}>user).name; // OK
타입단언
example 1
let idx: any = 123;
let uid = idx as number; // any type을 as 를 이용하여 number 타입으로 변경
example 2
interface IText {
idx: number
}
let user: object = {idx: 1};
(user as IText).idx;
(<IText>user).idex;
기타 다양한 에러 처리
const colliderDesc: RAPIER.ColliderDesc = createColliderFromOptions(...)
// Type 'ColliderDesc | null' is not assignable to type 'ColliderDesc'.
// Type 'null' is not assignable to type 'ColliderDesc'.ts(2322)
const colliderDesc: RAPIER.ColliderDesc = <RAPIER.ColliderDesc>createColliderFromOptions(...)