웹/JavaScript

[이펙티브 타입스크립트] 5장 any 다루기

Judith Hopps 2023. 7. 24. 09:57
반응형

5장 any 다루기

타입 스크립트의 타입 시스템은 선택적이고 점진적이기 때문에, 

정적이면서 동적인 특성을 가지고 있다. 

 

 

item 38. any 타입은 가능한 한 좁은 범위에서만 사용하기

- Blink 예시 ) any 로 선언을 하지만 @ts-ignore을 사용해서 강제로 타입 오류를 제거

class Form extends React.Component<any, any> {
constructor(props: any) {
super(props)
const initialState: any = {
goodsName: '',
moid: '',
amount: '',
buyerName: '',
buyerTel: '',
buyerEmail: '',
returnURL: '',
ReqReserved: '',
ediDate: '',
hashString: '',
mid: '',
}
this.state = initialState
// @ts-ignore
this.form = React.createRef()
}

 

item 39. any를 구체적으로 변형해서 사용하기

  • next-face 예시 코드 (작성자: subin)
    • any[]를 사용하여 구체적인 형태로 사용
    • type Props = { options: Array<{ text: string; value: any }> selectedOptions: any[] onSubmitOption: (value: any) => void }

 

item 40. 함수 안으로 타입 단언문 감추기

 

item 41. any의 진화를 이해하기

 

item 42. 모르는 타입의 값에는 any 대신 unknown을 사용하기

 

  • next-face 예시 코드 (작성자: subin) 고객웹에서 api 결과값을 확인하는 코드 api 리턴값을 알수 없지만, 동적으로 반환값을 확인하는 코드
  • export function buildDynamic<T>( builder: T | DynamicBuilder<T> | NestedDynamicBuilder<T>, context: any, ): T { if (isNestedDynamicBuilder<T>(builder)) { const op = Object.keys(builder)[0] as LogicalOperator switch (op) { case LogicalOperator.$and: return builder[op].every(b => buildDynamic(b, context), ) as unknown as T case LogicalOperator.$or: return builder[op].some(b => buildDynamic(b, context), ) as unknown as T case LogicalOperator.$not: return !buildDynamic(builder[op][0], context) as unknown as T case LogicalOperator.$notNull: return (buildDynamic(builder[op][0], context) != null) as unknown as T case LogicalOperator.$isNull: return (buildDynamic(builder[op][0], context) == null) as unknown as T ...생략 }
  • item 43. 몽키 패치보다는 안전한 타입을 사용하기
    • next-face 예시 코드 (작성자: subin) 고객웹에서 파트너의 리뷰 관리 코드 확인 코드 HTMLElement의 내장 속성을 추가 했지만, ‘@ts-ignore’을 사용해서 에러 감춤 (아마 document를 HTMLElement로 설정 안해서 에러 발생한지도…? )
    • const PartnerReviewGuidePage: NextPageWithLayout = () => { const [loading, setLoading] = useState(false) const handleClickReviewSending = () => { setLoading(true) // @ts-ignore document.location = PANTNER_APP_CX_CHAT_DEEPLINK }
  • item 44. 타입 커버리지를 추적하여 타입 안전성 유지하기
반응형