Language/JavaScript
[Typescript] hasText
덴마크초코우유
2024. 9. 11. 19:54
반응형
- 타입스크립트에서
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
참고
!!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로 함수 정의하는 것의 차이점도 추후 정리해봐야겠다.
반응형