티스토리 뷰
typescript의 옵션중에서 exactOptionalPropertyTypes 옵션이 있습니다
이 옵션은 기본적으로는 disabled 상태입니다
이 옵션이 무슨 옵션인지 한번 알아볼까요
일단 exactOptionalPropertyTypes 이름을 해석해보면
"정확한 옵셔널 프로퍼티 타입" 입니다
옵셔널 프로퍼티 타입이 정확하다는 말이죠
이 말 뜻이 무엇일까요?
interface UserDefaults {
colorThemeOverride?: "dark" | "light";
}
typescript의 기본설정(exactOptionalPropertyTypes가 disabled)에서는
colorThemeOverride는
dark, light 뿐만아니라 undefined 까지 세개의 값을 가질수 있습니다
dark, light만 선언했는데
interface UserDefaults {
colorThemeOverride?: "dark" | "light" | undefined;
}
이렇게 해석되고 있습니다
그렇기 때문에 아래의 코드는 모두 정상코드입니다
const userDefaults1 : UserDefaults = {} // OK
const userDefaults2 : UserDefaults = {
colorThemeOverride: undefined
} // OK
const userDefaults3 : UserDefaults = {
colorThemeOverride: "dark"
} // OK
const userDefaults4 : UserDefaults = {
colorThemeOverride: "light"
} // OK
그런데 분명 해당 속성이 없는것과 해당 속성이 undefined인것은 다르지말입니다
기본설정에서는 optional 프로퍼티에 대해서 undefined를 할당할수 있도록 되어있습니다
그러면 이 상황에서 해당 프로퍼티가 있는지 조사를 하게 되면 어떻게 될까요?
'colorThemeOverride' in userDefaults1 // 해당 프로퍼티를 선언 안했으므로 false
'colorThemeOverride' in userDefaults2 // 프로퍼티가 선언되어있지만 undefined이므로 true
이런 결과를 리턴하게 됩니다
undefined를 통해서 optional로 설정하려고 했던 행동은
undefined를 할당함으로서 'colorThemeOverride' in userDefault2에서 true를 리턴하는 결과를 가져왔습니다
의도했던 바와 다르게 동작할 우려가 있습니다
exactOptionalPropertyTypes옵션을 enable 시키면 어떻게 될까요
Type 'undefined' is not assignable to type "dark" | "light"
colorThemeOverride는 optional일뿐 undefined는 타입에 선언되어있지 않기 때문에
undefined를 할당하려는 행위가 컴파일 타임에서 오류를 리턴하게 됩니다
원하는 json 형태를 리턴하고자 할때 optional로 처리하여 해당 필드가 리턴되지 않도록 하기 위해 undefined를 선언하는 경우를 종종봅니다
선언이 되지 않은것(undefined)과 있는지 없는지(optional)는 분명 다른 것이라는것을 인지하여 개발하면 좋겠네요
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
shopify가 만든 Liquid를 알아보자 (0) | 2023.12.30 |
---|---|
mysql 새로운 컬럼 추가할때도 table lock 걱정하지마세요 (0) | 2023.07.13 |
Swift OpenAPI Generator (0) | 2023.06.14 |
아직도 손으로 한땀한땀 response model을 만들고 계신가요? (0) | 2023.04.06 |
javascript로 글자수 세기 위한 노력 (0) | 2023.04.05 |
- Total
- Today
- Yesterday
- 모바일
- 스마트폰
- iPhone
- 앱
- 아이디어
- 경진대회
- 네이버
- 트위터
- 소프트웨어
- 어플리케이션
- AWS
- 벤처
- 구글
- 애플
- 앱스토어
- 창업
- 자바스크립트
- 대학생
- 안드로이드
- 아이폰
- php
- android
- CSS
- JavaScript
- 게임
- 웹표준
- Apple
- 공모전
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |