타입 단언보다는 타입 선언을 사용하기
변수 alice 와 bob 의 타입은 Person 으로 동일합니다. 하지만 둘은 차이점이 있습니다.
alice 는 타입 선언 이며 bob은 타입 단언을 수행합니다.
타입 선언은 할당되는 값이 해당 인터페이스를 만족하는지 검사합니다. 따라서 alice변수 는 name 속성이 없다고 타입스크립트가 알려주고있는것을 볼수있습니다.
하지만 타입단언을한 bob변수는 알려주지않는것을 볼수있습니다.
그이유는 타입 단언은 타입스크립트가 추론한타입이 있더라도 강제로 타입을 지정해주는것입니다. 따라서 타입체커가 오류를 발견했음에도 강제로 타입을 지정해주었기때문에 오류가 발생하지 않는것입니다.
타입 단언과 선언의 차이는 속성을 추가할 때도 마찬가지입니다.
이와같은이유로 타입 단언이 꼭 필요한 경우가 아니라면 사용을 지양하고 안정성 체크가 되는 타입 선언을 사용하는것이 좋습니다.
다음은 화살표 함수 타입선언과 단언에 대해서 알아보겠습니다.
people 변수에 인터페이스를 사용하여 타입을 지정해주고싶을때 타입 단언을 사용하면 위의 문제점들이 똑같이 발생합니다.
name 속성이 빠져도 타입체커가 이를 무시하고있습니다.
화살표함수에서 타입선언을 제대로 해주는방법은 화살표함수의 반환타입을 선언해주는것입니다.
여기서 소괄호는 매우 중요합니다(name):Person 은 name의타입이 없고 반환타입이 Person 이라는것을 명시합니다. 즉 우리는 Person[] 을 반환하고싶은것이기때문에 소괄호가 필요한것입니다.
만약 소괄호가 없다면 name:Person 즉 name은 Person 타입이 되는것이고 오류가 발생합니다.
'Typescript' 카테고리의 다른 글
Effective Typescript - 함수 표현식에 타입 적용하기 (0) | 2023.04.09 |
---|---|
Effective Typescript - 잉여 속성 체크의 한계 (0) | 2023.04.08 |
Effective Typescript - any를 지양해야하는 이유 (0) | 2023.04.05 |
Typescript - implements 란? 그리고 private,protected 에 대해서 (0) | 2023.03.23 |
Typescript - Mapped Types (0) | 2023.03.23 |