[원티드프리온보딩] 220531

김듑듑·2022년 5월 30일
0

TIL

목록 보기
29/33

타입스크립트 타입형변환

IMember1 형식으로 데이터가 들어오고 IMember2 형식으로 데이터를 저장해야함.
그래서 타입을 바꿔줘야함 (사실 아님 더 읽으면 알게됨)

interface IMember1 {
  id: number | string;
  username: string;
  crt_ymdt: string | object;
}

interface IMember2 {
  id: number;
  username: string;
  crt_ymdt: string ;
}

원본 array {...복사}했더니 object됨 그래서 map안됨
난 이미 map으로 코드 다 짜둠 그럼 object를 array로 바꿔야함? 굳이 싶었음

const members = originMembers as IMember[];

그냥 할당해버리고 이런식으로 타입 단언하니까 됨.
들어오는 IMember1 형식으로 데이터는 어떻게 되든 상관없기 때문에 이렇게 함.


타입변환, 타입단언

Type casting
데이터의 타입을 변환 (실제 타입이 변하는 것)

Type assertion
데이터의 타입을 명시 (데이터 타입에 영향을 안 줌)

https://www.typescriptlang.org/ko/docs/handbook/2/everyday-types.html#type-assertions

때로는 TypeScript보다 당신이 어떤 값의 타입에 대한 정보를 더 잘 아는 경우도 존재합니다.
이런 경우, 타입 단언을 사용하면 타입을 좀 더 구체적으로 명시할 수 있습니다.

타입 표기와 마찬가지로, 타입 단언은 컴파일러에 의하여 제거되며 코드의 런타임 동작에는 영향을 주지 않습니다.
기억하세요: 타입 단언은 컴파일 시간에 제거되므로, 타입 단언에 관련된 검사는 런타임 중에 이루어지지 않습니다. 타입 단언이 틀렸더라도 예외가 발생하거나 null이 생성되지 않을 것입니다.

꺾쇠괄호를 사용하는 것 또한 (코드가 .tsx 파일이 아닌 경우) 가능하며, 이는 동일한 의미를 가집니다.


왜죠 tsx가 아닌 경우는 그럼 어떻게 다른지도 알려주셔야죠

검색검색


https://www.typescriptlang.org/ko/docs/handbook/jsx.html?


as 연산자
var foo = <foo>bar;
var foo = bar as foo;
변수 bar가 foo 타입을 갖도록 단언합니다.


TypeScript 또한 단언을 위해 꺾쇠괄호를 사용하기 때문에, JSX의 구문과의 결합은 특정 구문 분석에 어려움이 발생할 수 있습니다.
결과적으로 TypeScript는 .tsx파일에서의 꺾쇠괄호 타입 단언을 허용하지 않습니다.
이 구문은 .tsx 파일에서 사용될 수 없으므로, 대체 타입 단언 연산자인 as를 사용해야 합니다.

0개의 댓글