[Typescript] hasText

2024. 9. 11. 19:54·Language/JavaScript
반응형
  • 타입스크립트에서 StringUtils.hasText를 어떻게 만들까
  • 구현하며 알게된 타입스크립트 문법들
function hasText (str?: string | null): boolean {
    return !!str?.trim()
}

주요 문법

  • Optional Chaining(?.)
    • str이 null 또는 undefined일 경우 바로 undefined를 반환
    • null 또는 undefined이 아니면 trim()을 실행해 양 끝의 공백을 제거한 문자열 반환
  • **!!**
    • 부정 연산자 !를 두 번 사용
    • Optional Chaining의 결과로 나온 null, undefined를 boolean타입인 false로 변환
    • trim()으로 만들어진 문자열은
      • 빈 문자열("")이라면 false
      • 문자를 가진 문자열이면 true

기타

  • 위에서 구현한 hasText와는 상관 없는 내용이지만 !!를 잘못 사용하다 고생했던 버그
function foo(val: boolean) {
    return !!val
}

foo(dto.flag) // dto.flag의 값 그대로 반환
  • 의도는 dto.flag의 값을 그대로 반환
  • 그런데 dto.flag가 true/false 상관없이 그대로 true 반환하는 경우 발생
  • 원인 : dto 시리얼라이즈 과정에서 flag가 boolean 타입이 아니라 string 타입변환...
    • !문자열은 false, !!문자열은 true가 된다.
    • !!"false"처럼 false가 문자열이라서 계속 true가 반환됨
      • !"false" -> false
      • !false -> true

참고

  • MDN Web Docs - 논리적 NOT (!)
!!true; // !!truthy는 true를 반환합니다.
!!{}; // !!truthy는 true를 반환합니다. 임의의 object는 참 같은 객체입니다.
!!new Boolean(false); // .valueOf()에서 false값을 가지는 불리언 객체도요!
!!false; // !!falsy는 false를 반환합니다.
!!""; // !!falsy는 false를 반환합니다.
!!Boolean(false); // !!falsy는 false를 반환합니다.

  • 아직 typescript에서 생소한 용어가 많다 : truthy, falsy
  • function vs lambda로 함수 정의하는 것의 차이점도 추후 정리해봐야겠다.
반응형
저작자표시 비영리 변경금지 (새창열림)
'Language/JavaScript' 카테고리의 다른 글
  • [Typescript] User Defined Type Guards
  • [Vue] 플러그인 만들기
  • [Vue] Vue 인스턴스
  • [JS] Phaser
덴마크초코우유
덴마크초코우유
IT, 알고리즘, 프로그래밍 언어, 자료구조 등 정리
    반응형
  • 덴마크초코우유
    이것저것끄적
    덴마크초코우유
  • 전체
    오늘
    어제
    • 분류 전체보기 (117)
      • Spring Framework (2)
        • Spring (2)
        • JPA (2)
        • Spring Security (0)
      • Language (51)
        • Java (11)
        • Python (10)
        • JavaScript (5)
        • NUXT (2)
        • C C++ (15)
        • PHP (8)
      • DB (16)
        • MySQL (10)
        • Reids (3)
        • Memcached (2)
      • 개발 (1)
      • 프로젝트 (2)
      • Book (2)
      • PS (15)
        • 기타 (2)
        • 백준 (2)
        • 프로그래머스 (10)
      • 딥러닝 (8)
        • CUDA (0)
        • Pytorch (0)
        • 모델 (0)
        • 컴퓨터 비전 (4)
        • OpenCV (1)
      • 기타 (16)
        • 디자인패턴 (2)
        • UnrealEngine (8)
        • ubuntu (1)
        • node.js (1)
        • 블로그 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    redis
    JavaScript
    클래스
    pytorch
    Unreal Engine
    알고리즘
    C++
    php
    JS
    게임 개발
    블루프린트
    프로그래머스
    C
    memcached
    Python
    NUXT
    mscoco
    웹
    게임
    FPS
    select
    언리얼엔진4
    Unreal
    PS
    CPP
    MySQL
    map
    자바
    파이썬
    딥러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
덴마크초코우유
[Typescript] hasText
상단으로

티스토리툴바