πŸ‘©‍πŸ’»/TypeScript

[TypeScript] TS2531 Object is possibly 'null'κ³Ό Optional Chaining Operator(μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž) (?.)

ν•œλ‚˜ 2022. 1. 20. 01:27

μž‘λ…„ λ§λΆ€ν„°λŠ” μ›Ή κ°œλ°œλ³΄λ‹€λŠ” μ•± κ°œλ°œμ„ 더 μ—΄μ‹¬νžˆ ν•˜λŠ” ν•΄λ‹€. λ„€μ΄ν‹°λΈŒμ— λŒ€ν•œ 지식이 μ—†μ–΄μ„œ, λ˜λ„λ‘ 빨리 λ§Œλ“€μ–΄μ•Ό ν•˜λŠ” MVP 앱은 λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ+μ—‘μŠ€ν¬ μŠ€νƒμœΌλ‘œ μ‹œμž‘ν•˜κ²Œ λ˜μ—ˆλŠ”λ°, Expo ν”„λ ˆμž„μ›Œν¬κ°€ μ œκ³΅ν•˜λŠ” expo-constants library μ‚¬μš© 쀑에 λ§Œλ‚œ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ—λŸ¬μ΄λ‹€.

<Animated.View
        pointerEvents={'none'}
        style={[
          StyleSheet.absoluteFill,
          {
            // backgroundColor: Constants.manifest?.splash?.backgroundColor,
            backgroundColor: Constants.manifest.splash.backgroundColor,
            opacity: animation,
            flex: 1,
            top: 284.45,
            alignItems: 'center',
          }
        ]}
      >

 

λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒμ˜ Aniamted λͺ¨λ“ˆμ„ μ‚¬μš©ν•΄ backgroundColorλ₯Ό 지정할 λ•Œ λ°œμƒν–ˆλŠ”λ°, μ΄λ•Œ App.json에 미리 μž‘μ„±ν•œ μ‹œμŠ€ν…œ 배경색을 가지고 였렀고 ν–ˆλ‹€. 주석을 μ²˜λ¦¬ν•˜μ§€ μ•Šμ€ μ½”λ“œμ—μ„œ 보면 λͺ¨λ“  객체듀이 μ²΄μ΄λ‹λ˜μ–΄ 킀듀을 잘 따라가고 μžˆλŠ”λ°, μ—λŸ¬κ°€ λ‚˜μ„œ App.json으둜 λ‹€μ‹œ κ°€μ„œ 확인해봀닀.

 

"splash": {
      "image": "./src/assets/images/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },

Constantsμ—μ„œ app.json의 값을 가지고 였기 μœ„ν•΄μ„œλŠ” manifestλ₯Ό κ±°μΉ˜λŠ” 것은 확인이 λ˜μ—ˆλŠ”λ°, μ΄λ ‡κ²Œ λͺ…μ„Έλ₯Ό μ±„μ›Œ κΈ°λ‘ν•œλ‹€ 해도, TSλŠ” 객체가 null 값이 될 μˆ˜λ„ μžˆλ‹€λŠ” 상황을 미리 μ•Œλ €μ£Όκ³  μžˆμ—ˆλ˜ 것이닀.

 

2021.02.24 - [πŸ‘©‍πŸ’»/JavaScript] - [ES2020] Nullish Coalescing Operator (null 병합 μ—°μ‚°μž ??)

 

[ES2020] Nullish Coalescing Operator (null 병합 μ—°μ‚°μž ??)

κΈ°μ‘΄ || μ—°μ‚°μžμ˜ ν•œκ³„μ  function isEnabled(options) { return console.log(options.enabled || true) } isEnabled({}); // true isEnabled({enabled: null}); // true isEnabled({enabled: false}); // true..

uiyoji-journal.tistory.com

 

 

? μ—°μ‚°μžλŠ” 이전에 ν•œ 번 μ†Œκ°œν–ˆλ˜ Nullish Coalescing Operator라고, null 병합 μ—°μ‚°μžμ™€ μœ μ‚¬ν•œ 역할을 ν•œλ‹€. ?.은 optional chaining operator라고 ν•˜λŠ”λ°, ν•œκ΅­μ–΄λ‘œλ„ λ§ˆλ•…ν•œ λ²ˆμ—­μ–΄ 없이, μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μžλ‘œ λΆ€λ₯΄λŠ” λͺ¨μ–‘이닀.

 

ES2020, Optional Chaining Operator ?.

이 μ—°μ‚°μžλŠ” dot operator둜 μ—°κ²°λœ 각각의 μ€‘μ²©λœ 객체 μ•ˆμ˜ ν”„λ‘œνΌν‹°λ₯Ό μ•„μ£Ό κ°„λ‹¨ν•˜κ²Œ 검사해쀀닀. μœ„ ν¬μŠ€νŠΈμ—μ„œλ„ μΌμ§€λ§Œ, ?? 병합 μ—°μ‚°μžμ™€ ?. μ—°μ‚°μžλŠ” ν•¨κ»˜ μ“Έ λ•Œ 막강해진닀. μ–΄λ–€ 값이 μ‘΄μž¬ν•˜μ§€ μ•Šμ„ λ•Œ 이λ₯Ό undefined둜 λ°›λŠ” λŒ€μ‹  μ’€ 더 μ•ˆμ „ν•œ λ°©λ²•μœΌλ‘œ 값을 μ œκ³΅ν•  수 μžˆλ‹€.

 

const AlternativeImage from '../assets/alternative.png';

const Constants = {
    splash: {
           image: null 
    }
}

const SplashImage = Constants?.splash?.image ?? AlternativeImage;

 

λ¦¬μ•‘νŠΈ λ„€μ΄ν‹°λΈŒ κ°œλ°œμ„ ν•˜λ‹€κ°€ λ§Œλ‚¬λ˜ μ—λŸ¬μ˜ κ·Έ Constants의 μ€‘μ²©λœ 객체인 splash와 image둜 μ˜ˆμ‹œλ₯Ό λ“€μ–΄λ³΄μžλ©΄, imageκ°€ null둜 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€ ν–ˆμ„ λ•Œ, null 병합 μ—°μ‚°μžλ‘œ λŒ€μ²΄ 이미지λ₯Ό 넣어쀄 μˆ˜λ„ μžˆλ‹€.

아직 μ‹€μ œ DBμ—μ„œ 값을 받아와 λ™μ μœΌλ‘œ λΏŒλ¦¬λŠ” λ‹¨κ³„λŠ” μ•„λ‹ˆλΌ, ?와 ?? μ—°μ‚°μžλ₯Ό κ·Έλ ‡κ²Œ 많이 μ“°κ³  μžˆμ§€λŠ” μ•Šμ€λ°, μ‹€μ œ 값을 λ™μ μœΌλ‘œ λ°›μ•„μ˜€κ³  μžˆλ‹€λ©΄, 잘 κΈ°μ–΅ν•΄λ‘μ—ˆλ‹€κ°€ 써야겠닀.