-ã¿ãªãããããã«ã¡ã¯ãç§ã®ååã¯Leshaã§ããããã³ããšã³ãéçºè ã§ããã¯ãããŸããããç§èªèº«ãšç§ãåãçµãã§ãããããžã§ã¯ãã«ã€ããŠå°ãã話ããŸããFlowã¯Yandex.Practicumããè±èªãåŠãã§ããŸãããªãªãŒã¹ã¯ä»å¹Ž4æã«è¡ãããŸãããããã³ãã¯TypeScriptã§çŽæ¥èšè¿°ãããŠããŸãããããã以åã¯ã³ãŒãã¯ãããŸããã§ããã
ç§ã®çµéšã«ã€ããŠå°ããé ã幎ã«ãç§ã¯ããã°ã©ãã³ã°ãå§ããŸããã 2013幎ã«åœŒã¯åãå§ããŸããã
ããã«ç§ã¯åç·ã«ãã£ãšèå³ãããããšã«æ°ã¥ããŸããããéçã«åä»ããããèšèªã®çµéšããããŸããã JavaScriptã䜿ãå§ããŸãããããã®éçåä»ãã¯ãããŸããã§ããã䟿å©ããã«èŠããŠãæ°ã«å ¥ããŸããã
ãããžã§ã¯ãã®å€æŽã§ãTypeScriptã䜿çšããŠäœæ¥ããããã«ãªããŸããã TypeScriptã«åãæ¿ããããšã§å®çŸããé·æã«ã€ããŠèª¬æããŸãããããžã§ã¯ããçè§£ãããããªããŸãããããžã§ã¯ãã§äœ¿çšãããããŒã¿ã¿ã€ããšãããã®éã®å€æã«ã€ããŠèª¬æããŸãã
ã³ãŒãã倿Žããæ¹ãå®å šã§ããããã¯ãšã³ããŸãã¯ã³ãŒãã®äžéšã«å€æŽããã£ãå ŽåãTypeScriptã¯ãšã©ãŒãçºçããå Žæã匷調衚瀺ããŸãã
ã¿ã€ãã«ã€ããŠã®æžå¿µã¯å°ãªããªããŸããæ°ããæ©èœãäœæãããšãã¯ãæ©èœãæ©èœããã¿ã€ããããã«èšå®ããã®ã§ãç°ãªãããŒã¿ãåãåãå¿é ãå°ãªããªããŸãã
nullãŸãã¯undefinedãçºçããæãã¯ãããŸããããã©ãã€ã¢ã§ããå¿ èŠã¯ãªããäžèŠãªifããã³åæ§ã®æ§é ãæ¿å ¥ããå¿ èŠã¯ãããŸããã
ä»å¹Žã®åãã«ãç§ã¯ãããŒã«ç§»åããŸãããTypeScriptãããã§äœ¿çšãããŠããŸãããç§ã¯ãããå°ãèªèããŠããŸããã§ãããã©ãããŠïŒåœŒã¯ç§ã«èŠªåãããŸãããã¯ã©ã€ã¢ã³ããšã©ãŒã®4åã®1ã¯ãnullãšæªå®çŸ©ã«é¢é£ããŠããŸãããç§ã¯äœãåé¡ãªã®ããçè§£ãå§ããTypeScriptã®ãã¹ãŠã®åäœã倿Žããæ§æã®1è¡ãèŠã€ããŸãã
ãããã¯strictã®å å«ã§ããããã«ã¯ãããŸããã§ããããæ€èšŒãæ¹åããããã«ãªã³ã«ããå¿ èŠããããŸããã
TypeScriptïŒå³å¯
峿 Œãšã¯äœã§ããïŒããã¯äœã§æ§æãããŠããŸããïŒ
ããã¯åå¥ã«ãªã³ã«ã§ãããã©ã°ã®ã»ããã§ãããç§ã®æèŠã§ã¯ããããã¯ãã¹ãŠéåžžã«äŸ¿å©ã§ãã noImplicitAny-ãã®ãã©ã°ãæå¹ã«ããåã«ãããšãã°ãanyãªã©ã®ãã©ã¡ãŒã¿ãæé»çã«ãªã颿°ã宣èšã§ããŸãããã®ãã©ã°ãæå¹ã«ããå ŽåãTypeScriptãã³ã³ããã¹ãããã¿ã€ããèšç®ã§ããªãå Žæã«ã¿ã€ãã³ã°ã远å ããå¿ èŠããããŸãã
ã€ãŸãã2çªç®ã®ã±ãŒã¹ã§ã¯ãã³ã³ããã¹ãèªäœããªããããå ¥åã远å ããå¿ èŠããããŸãããããããã3çªç®ã®ã±ãŒã¹ã§ã¯ãæ°å€ã¿ã€ããããããšãã³ã³ããã¹ãããæããã§ãããããã®ã¿ã€ãã远å ããããšã¯ã§ããŸããã
noImplicitThisã TypeScriptã§ã¯ãã³ã³ããã¹ãããªãå Žåã«ãããå ¥åããå¿ èŠããããŸããã³ã³ããã¹ãããªããžã§ã¯ããŸãã¯ã¯ã©ã¹ã§ããå Žåããããè¡ãå¿ èŠã¯ãããŸããã
alwaysStrictããã¹ãŠã®ãã¡ã€ã«ã«ãusestrictãã远å ããŸãããã ããJavaScriptãã³ãŒããå®è¡ããæ¹æ³ã«ã¯åœ±é¿ããŸãã ïŒ...ïŒ
strictBindCallApplyãäœããã®çç±ã§ããã®ãªãã·ã§ã³ãæå¹ã«ããåã«ãTypeScriptã¯ãã€ã³ããé©çšãããã³åã®åŒã³åºãããã§ãã¯ããŸãããããããªã³ã«ããåŸã圌ã¯ãããããã§ãã¯ããç§ãã¡ããã®ãããªåä»ãªããšãããããšãèš±å¯ããŸããã
strictNullChecksã¯ãç§ã®æèŠã§ã¯ãæãå¿ èŠãªãã§ãã¯ã§ãã nullãŸãã¯undefinedãçºçããå¯èœæ§ã®ããå Žæãå ¥åæã«æå®ããå¿ èŠããããŸããå«ããåã«ãæç€ºçã«æå®ãããŠããªãå Žåã«nullãŸãã¯undefinedãæž¡ãããšãã§ããããããšã©ãŒãçºçããŸãããã®åŸãã³ã³ãããŒã«ã¯ã¯ããã«è¯ããªããŸãã
次ã«ãstrictFunctionTypesãããã§ã®ç¶æ³ã¯ããå°ãè€éã§ãã 3ã€ã®æ©èœããããšæ³åããŠã¿ãŸãããã 1ã€ã¯åç©ããã1ã€ã¯ç¬ããã1ã€ã¯ç«ãæ±ããŸããç¬ãšç«ã¯åç©ã§ããã€ãŸããç¬ãç«ãšåãããã«æ±ãã®ã¯ãç¬ãéãã®ã§ééã£ãŠãããšããããšã§ããåç©ãšåãããã«ç¬ã§ãæ£ããåäœããŸãã
3çªç®ã®ãªãã·ã§ã³ã¯ãç¬ã®ãããªåç©ãæ±ãå Žåã§ããäœããã®çç±ã§ãæåã¯TypeScriptã§èš±å¯ãããŠããŸããããã®ãªãã·ã§ã³ãæå¹ã«ãããšç¡å¹ã«ãªããç¹å®ã®ãã§ãã¯ãå®è¡ãããŸãã
次ã«ãstrictPropertyInitializationãããã¯ã¯ã©ã¹çšã§ããããããã£ã宣èšãããšãããŸãã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§åæå€ãèšå®ããå¿ èŠããããŸãããã®ã«ãŒã«ãåé¿ããå¿ èŠãããå ŽåããããŸããæå笊ã䜿çšããããšãã§ããŸãããç¹°ãè¿ãã«ãªããŸãããããã«ã¯ããå°ã泚æãå¿ èŠã§ãã
ããã§ãstrictãæå¹ã«ããå¿ èŠãããããšãããããŸããããªã³ã«ããããšãããšãå€ãã®ãšã©ãŒã衚瀺ãããŸãããã®ãããå³å¯ã«ç§»è¡æ§æã䜿çšããããšã«ããŸããã 3ã€ã®ã¹ãããã§å³å¯ã«èšå®ããŸãã
æåã®æ®µéïŒtsconfigã«ãstrictãïŒtrueã远å ããŸãããããã£ãŠãéçºç°å¢ã§ã¯ãstrictãå«ãŸããŠããããã«çºçãããšã©ãŒã®ããå Žæã®å ¥åãæ±ããããŸãã
ãã ããwebpackã®å Žåãstrictãfalseã«ãªãç¹å¥ãªtsconfigãäœæããããããã«ãæã«äœ¿çšããŸããã€ãŸããã¢ã»ã³ããªäžã«äœãå£ããŸãããããšãã£ã¿ãŒã§ã¯ãããã®ãšã©ãŒã衚瀺ãããŸãããããŠãããã«ä¿®æ£ã§ããŸããæ¬¡ã«ãæã 第2段éã«ç§»ããŸãããããã¯ä¿®æ£ã§ããéåžžã®tsconfigã䜿çšããŠãããžã§ã¯ãããã«ãããŸããåºãŠããééãã®ããã€ããä¿®æ£ããèªç±ãªæéã«ããããã¹ãŠç¹°ãè¿ããŸãã
ãã®ãããªã¢ã¯ã·ã§ã³ã«ããããããŸã§ã®ãšãããšã©ãŒã®æ°ã400ãã200ã«æžãããŸããã第3段éã«é²ãããšã楜ãã¿ã«ããŠããŸããã€ãŸãããã«ãæã«webpackTsConfigãåé€ããtsconfigã䜿çšããŸãããå³å¯ã«æå¹ã«ããŸãã
TypeScript:
strictã§ã«ããŒãããŠããªãTypeScriptã®å°ããªåŸ®åŠãªç¹ã«ã€ããŠå°ã話ãããšãã§ããŸãããæ£ãã圢åŒåããã®ã¯å°é£ã§ãã
æå笊æŒç®åããå§ããŸããããããã¯ããªãã«äœããããã®ã§ããïŒãã®å Žåãæªå®çŸ©ã«ã§ããªããã®ããã«ãæªå®çŸ©ã«ã§ãããã£ãŒã«ããåç §ããŠãã ãããå³å¯ã¢ãŒãã§ã¯ããã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããšãããšã次ã®ããã«æç€ºçã«èšãã®ãçã«ããªã£ãŠããŸããããã¯ééããªãnullãŸãã¯æªå®çŸ©ã§ã¯ãªããšç¢ºä¿¡ããŠããŸããããããããã¯æªãããšã§ããçªç¶nullãŸãã¯æªå®çŸ©ã§ããããšã倿ããå Žåãå®è¡æã«èªç¶ã«ãšã©ãŒãçºçããããã§ãã
ESLintã¯ããã®ãããªããšãåé¿ããã®ã«åœ¹ç«ã¡ãŸããåã«çŠæ¢ããã ãã§ãããããŸãããåã®äŸãä»ããä¿®æ£ããã«ã¯ã©ãããã°ããã§ããïŒ
ãã®ãããªç¶æ³ã«ãããšããŸãããã
èŠçŽ ãããããªã³ã¯ãŸãã¯ã¹ãã³ã¿ã€ãã«ããããšãã§ããŸããç§ãã¡ã®é ã§ã¯ãã¹ãã³ã¯ããã¹ãã®ã¿ã§ããããªã³ã¯ã¯ããã¹ããšãªã³ã¯ã§ããããšãããããŸãã
ïŒåçïŒ
ããããTypeScriptèšèªãäŒããã®ãå¿ãããããgetItemHtml颿°ã§ããªã³ã¯ã®å Žåã«æ¬¡ã®ããã«èšããªããã°ãªããªãç¶æ³ãçºçããŸããhrefã¯ãªãã·ã§ã³ã§ã¯ãªããééããªããããªããŸããããã¯ããšã©ãŒãçºçããå¯èœæ§ã®ããå Žæã§ããããŸãããããä¿®æ£ããæ¹æ³ã¯ïŒ
æåã®ãªãã·ã§ã³ã¯ãå ¥åãä¿®æ£ããããšã§ããã€ãŸãããªã³ã¯ã«ã¯hrefãå¿ èŠã§ãããspanã«ã¯ãªãã·ã§ã³ã§ããããšãTypeScriptã«æç€ºçã«ç€ºããŸãã
ãããŠãããã§ã¯æå笊ã¯å¿ èŠãããŸããã
2çªç®ã®ä¿®æ£ãªãã·ã§ã³ãã¢ã€ãã ã¿ã€ããç§ãã¡ã«ãã£ãŠèšè¿°ãããŠããããç§ãã¡ããããååŸããŠå¶éããããšã¯ã§ããªããšä»®å®ããŸããæ¬¡ã«ãåæ§ã®æ¹æ³ã§æžãçŽãããšãã§ããŸãã
泚æïŒãã§ãã¯ã衚瀺ãããã°ããã§ããæ¬¡ã«ãããã°ã©ããŒããã®ã³ãŒããäœæãããšãã«ãã®å€ãäºæããŠããªãã£ããã°ã衚瀺ããããããå°æ¥çã«ã¯ãã®ãšã©ãŒã衚瀺ãããé©åãªã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã
次ã«ãã©ããããããã¢ã€ãã ãã¬ã³ããªã³ã°ããããšããŠããŸããããã§ã¯ãåã«ãŠãŒã¶ãŒã«ãšã©ãŒãäžããããšãã§ããŸãããã ãããããéèŠã§ãªãããŒã¿ã§ããå Žåã¯ã次ã®ãããªã¹ã¿ããäœæã§ããŸãã
ãªã®ã§
ããã«ãasæŒç®åããããŸããããã¯ããªãã«äœããããã®ã§ããïŒ
ããã¯ããªããèšãããšãå¯èœã«ããŸã-ç§ã¯ããç¥ã£ãŠããŸãããã®ãããªã¿ã€ãããããŸã-ãããŠãŸãããªãèªèº«ãééãã«å°ããŸãã
é å
éäºã®æ¹æ³ã¯åãã§ããããå°ã泚æããå¿ èŠãããã®ã¯é åã§ããTypeScriptã¯äžèœè¬ã§ã¯ãªããããã€ãã®ç¹ããã§ãã¯ããŸãããããšãã°ãååšããªãé åèŠçŽ ãåç §ã§ããŸãããã®å Žåãé åã®æåã®èŠçŽ ãååŸãããã®ã³ãŒãã§ãšã©ãŒãååŸããŸããã©ãããã°ãããä¿®æ£ã§ããŸããïŒ
ç¹°ãè¿ããŸããã2ã€ã®æ¹æ³ããããŸããæåã®æ¹æ³ã¯å ¥åã§ããç§ãã¡ã¯æåã®èŠçŽ ãæã£ãŠãããšèšããæããããšãªããã®èŠçŽ ãåç §ããŸãããŸãã¯ãäœããçªç¶ééã£ãŠãããã©ããã空ã§ãªãé åãæç€ºçã«äºæãããŠãããã©ããã確èªãããã°ã«èšé²ããŸãã
ãªããžã§ã¯ã
ãªããžã§ã¯ãã«ã€ããŠãåãã§ããä»»æã®æ°ã®ããããã£ãæã€ããšãã§ããæªå®çŸ©ã®ãšã©ãŒãçºçããå¯èœæ§ã®ãããªããžã§ã¯ãã宣èšã§ããŸãã
ããã§ããå¿ èŠãªããããã£ãæç€ºçã«æç€ºããããåã«ç¢ºèªããããšãã§ããŸãã
ã©ãã
ä»ãæãããªããšã¯äœã§ãã§ãã
å ¥åããŸã£ãããªãã£ããã®ããã«ããªããžã§ã¯ãã®ä»»æã®ããããã£ãåç §ã§ããŸãããã®å Žåãxã䜿çšããŠããããããšãäœã§ãã§ããŸãããããŠåã³è¶³ãæã¡ãééããç¯ããŸãã
ç¹°ãè¿ããŸãããESLintã§ã¯ãããæç€ºçã«çŠæ¢ããããšããå§ãããŸãããããããããåç¬ã§çŸããç¶æ³ããããŸãã
ããšãã°ããã®å ŽåãJSON.parseã¯ãã®ã¿ã€ãanyã ããçæããŸããäœãã§ããã®ïŒ
ããªãã¯ç°¡åã«èšãããšãã§ããŸãïŒç§ã¯ããªããä¿¡ããŠããŸãããç§ã¯ãããäœã§ããããç¥ããªããšèšã£ãã»ããããã§ãããããŠç§ã¯ãããç¶ããŸãããããšäžç·ã«æ®ããã«ã¯ïŒãããæ¶ç©ºã®äŸã§ãã
ãŠãŒã¶ãŒãããŠããã®ãŠãŒã¶ãŒã«ã¯å¿ é ã®ååãšãªãã·ã§ã³ã®é»åã¡ãŒã«ããããŸãã
parseUser颿°ãäœæããŠããŸãã JSONæååãåãåãããªããžã§ã¯ããè¿ããŸããä»ãç§ãã¡ã¯ããããã¹ãŠããã§ãã¯ãå§ããŸããæåã«ãåã®ã¹ã©ã€ãã§ããç¥ã£ãŠãããè§£ææžã¿ã§äžæãªè¡ã衚瀺ãããŸããæ¬¡ã«ããã§ãã¯ãéå§ããŸãã
ãªããžã§ã¯ãã§ãªããnullã®å Žåã¯ããšã©ãŒãã¹ããŒããŸãã
ããã«ãå¿ é ã®nameããããã£ããªãå ŽåããŸãã¯æååã§ãªãå Žåã¯ããšã©ãŒãã¹ããŒãããŸãããããã³ãŒãã®ç¶ãã§ãã
ãã¹ãŠã®å¿ é ãã£ãŒã«ãããã§ã«åéãããŠããããããŠãŒã¶ãŒã®åœ¢æãéå§ããŸãã
次ã«ãã¡ãŒã«ãã£ãŒã«ãããããã©ããã確èªããŸããããã§ããå Žåã¯ããã®ã¿ã€ãããã§ãã¯ããã¿ã€ããäžèŽããªãå Žåã¯ããšã©ãŒãã¹ããŒããŸããã¡ãŒã«ããªãå Žåã¯äœãéä¿¡ãããçµæãè¿ããŸãããã¹ãŠé 調ãããããããªãã¯æãåçŽãªã¿ã€ãã®ããã«ããããæžãå¿ èŠããããŸãã
ãããŠããã¯å€ãã®ãã§ãã¯ãå¿ èŠã§ã
å žåçãªJSONãªã¯ãšã¹ãã¯æ¬¡ã®ããã«ãªããããå€ãã®æ€èšŒãå¿ èŠã§ãã
ããã«é¢åãªããšã¯ãããŸããããããã¯åã«fetchãšjsonïŒïŒã§ããanyããSomeRequestResponseãžã®å€æã代ããã«è¡šç€ºãããŸãããããæŠãå¿ èŠããããŸããåã®æ¹æ³ã§è¡ãããšããå°ãç°ãªãæ¹æ³ã§è¡ãããšãã§ããŸãã
io-ts
å éšçã«ã¯åãã§ããåãã§ãã¯ã«ã¯ç¹å¥ãªã©ã€ãã©ãªã䜿çšããŸãããã®å Žåãããã¯io-tsã§ããããã¯ããããæäœããæ¹æ³ã®ç°¡åãªäŸã§ãã
åã®ãŠãŒã¶ãŒã¿ã€ããååŸããŠã䜿çšããŠããã©ã€ãã©ãªå ã«èšè¿°ããŠã¿ãŸããããã¯ããããã§ã¯å ¥åãå°ãè€éã§ããã2ã€ã®æ¡ä»¶ãåæã«æºããå¿ èŠããããŸããå¿ é ã®ååãã£ãŒã«ããæã€ãªããžã§ã¯ããšããªãã·ã§ã³ã®é»åã¡ãŒã«ãã£ãŒã«ããæã€ãªããžã§ã¯ãã§ããå¿ èŠããããŸããã©ãããã°ããããã¹ãŠç¢ºèªã§ããŸããïŒ
åãparseUserãæžããŠã¿ãŸãããããã®å ŽåãUser.decodeã¡ãœããã䜿çšããŠããŸãããã§ã«ãã¢ãªã³ã°ãããŠãããªããžã§ã¯ããããã«æž¡ããçµæãè¿ããŸããããããçãã圢åŒã§ãã¿ã€ãEitherã®ãªããžã§ã¯ãã2ã€ã®ç¶æ ã«ãªããŸããæåã¯æ£ããã§ããããã¯éåžžããã¹ãŠãããŸããã£ãããšãæå³ããŸããå·Šã¯ããŸããããªãã£ããšèšããŸãããããã®ç¶æ ã®äž¡æ¹ã«ã詳现ãåŠç¿ã§ããããããã£ããããŸããæåããå Žåãããã¯å®è¡ã®çµæã§ããããšã©ãŒã®å Žåã¯ãšã©ãŒã§ãã
çµæãå·Šã®ç¶æ ã§ãããã©ããã確èªããŸãããããããªãããšã©ãŒãçºçãããšèšããŸããããã«ããã¹ãŠãé 調ã§ããã°ãåã«çµæãè¿ããŸãã
ãšã©ãŒã®è¡šç€º
ãšã©ãŒã®è¡šç€ºã«ã€ããŠãããªãã¯ãããå°ãæ¹åããããšãã§ããŸããããã«ã¯io-ts-reportersã䜿çšããŸãã io-tsãšåãäœè ãæžããã©ã€ãã©ãªã§ããããã«ããããšã©ãŒãçŸãã衚瀺ã§ããŸãã圌女ãããããšïŒããã§ã¢ãã«ãããå Žæã®ã³ãŒãã倿ŽããŸãããçµæãåãåããæååã®é åãè¿ããŸãã 1è¡ã«ãŸãšããŠè¡šç€ºããã ãã§ããæçµçã«äœãåŸãããŸããïŒ
JSONæååã«nullãæž¡ããšããŸãã
2ã€ã®ãšã©ãŒãçºçããŸããããã¯ã亀差ãè¡ã£ããããå®è£ ã®åŸ®åŠãã«ãããã®ã§ãããšã©ãŒã¯ååã«æããã§ããã©ã¡ããããªããžã§ã¯ããæåŸ ããŠãããnullã«ãªã£ããšèšã£ãŠããŸãããããã®æ¡ä»¶ã®ããããã«ã€ããŠãåå¥ã«ãšã©ãŒãçºçããã ãã§ãã
次ã«ãããã«ç©ºã®é åãæž¡ããŠã¿ãŸããããåãã«ãªããŸãã
圌ã¯ç°¡åã«èšãã§ãããïŒç§ããªããžã§ã¯ããæåŸ ããŠããŸãããã空ã®é åãåãåããŸããã
ãã®ããã誀ã£ãããŒã¿ã®éä¿¡ãéå§ãããšã©ããªãããåŒãç¶ã確èªããŸããããšãã°ã空ã®ãªããžã§ã¯ããæž¡ããŸãã
ããã§ãå¿ é ã®ååãã£ãŒã«ãããªããšããäºå®ã«ã€ããŠ1ã€ã®ãšã©ãŒãçºçããŸãã圌ã¯ååãã£ãŒã«ããæåååã§ããããšãæåŸ ããŠããŸããããæçµçã«ã¯æªå®çŸ©ã«ãªããŸããããã®ãšã©ãŒããäœãèµ·ãã£ãã®ããçè§£ããããã§ãã
次ã«ãããã«ééã£ãã¿ã€ããæž¡ãããšããŸããåã®äŸãšã»ãŒåããšã©ãŒãçºçããŸãã
ããããããã§åœŒã¯ç§ãã¡ãäŒããæå³ãã¯ã£ãããšç§ãã¡ã«æžããŠããŸãã
io-tsã¯ä»ã«äœãã§ããŸããïŒTypeScriptã¿ã€ããååŸã§ããŸããã€ãŸãããã®è¡ã远å ããŸããtypeofãštypeofã远å ããã ãã§ãã¢ããªã±ãŒã·ã§ã³ã§ããã«äœ¿çšã§ããTypeScriptã¿ã€ããååŸã§ããŸãã䟿å©ã§ãã
ãã®ã©ã€ãã©ãªã¯ä»ã«äœãã§ããŸããïŒã¿ã€ãã倿ããŸãããµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŠãããšããŸãããããµãŒããŒã¯ãæ¥ä»ãunixæé圢åŒã§éä¿¡ããŸãããŸããio-tsã©ã€ãã©ãªã®äœæè ã§ããio-ts-typesããã®ç¹å¥ãªã©ã€ãã©ãªããããŸããå ã äœæããã倿ãšããããã®å€æãç°¡åã«äœæã§ããããã«ããããŒã«ããããŸããæ¥ä»ãã£ãŒã«ãã远å ããŸããããã¯ãµãŒããŒããæ°å€ãšããŠååŸãããæçµçã«ã¯Dateãªããžã§ã¯ããšããŠåä¿¡ãããŸãã
ã¿ã€ãã説æããŸããã
ãã®ã©ã€ãã©ãªã®å 容ãèŠãŠãæãåçŽãªã¿ã€ãã説æããŠã¿ãŸãããã
ãŸãããããäžè¬çã«ã©ã®ããã«èšè¿°ãããŠããããèŠãŠã¿ãŸãããã倿ã«ãå¿ èŠã§ããããšãèãããšãåãããã«èª¬æãããŸãããããªãè€éã§ãããµãŒããŒããã¯ã©ã€ã¢ã³ããžã®çžäºäœçšãããã³ã¯ã©ã€ã¢ã³ããããµãŒããŒãžã®é倿ãèæ ®ãããšããµãŒããŒããã¯ã©ã€ã¢ã³ããžã®å€æã¯å¥ãšããŠã
ã¿ã¹ã¯ãå°ãåçŽåããŸãããããã§ãã¯ããã¿ã€ããæžãã ãã§ãããã®å Žåããããã®ãã£ãŒã«ãã®æå³ãçè§£ããŸãããã name-ã¿ã€ãåã
ãšã©ãŒã衚瀺ããå¿ èŠããããŸããåã®äŸã§èŠãããã«ããšã©ãŒã¯ã©ããããããã¿ã€ãã®ååãç¶Žã£ãŠããŸããããã§æå®ã§ããŸãã
次ã«ãæ€èšŒæ©èœããããŸããããšãã°ããµãŒããŒããã¯äžæãªå€ãå¿ èŠã§ãããšã©ãŒãæ£ãã衚瀺ããããã®ã³ã³ããã¹ããåããŸãããããŠããšã©ãŒãŸãã¯æ€èšŒæžã¿ã®å€ã®2ã€ã®ç¶æ ã§Eitherãªããžã§ã¯ããè¿ããŸãã
ããã«2ã€ã®æ©èœããããŸãïŒisãšencodeããããã¯é倿ããããã«äœ¿çšãããŸãããä»ã¯è§Šããªãã§ãã ããã
æãåçŽãªæååã¿ã€ããã©ã®ããã«è¡šãããšãã§ããŸããïŒååãstringã«èšå®ãããããæååã§ããããšã確èªããŸããçŽæ¥å€æããå Žåãããã¯å¿ èŠãããŸããããæ£åŒã«èšè¿°ããŸãããããŠãtypeofãå®è¡ããŠãã§ãã¯ããŸããæåããå Žåãçµæã¯æåãè¿ãããšã©ãŒã®çµæãšããŠå€±æãè¿ããŸãããšã©ãŒãæ£ãã衚瀺ãããããã«ãã³ã³ããã¹ãã远å ãããŸãããããŠãé倿ããªãã®ã§ãåããã®ãè¿ãã ãã§ãã
ç·Žç¿äž
å®éã«ã¯äœã§ããïŒãµãŒããŒããã®ããŒã¿ããã§ãã¯ããããšã«ããã®ã¯ãªãã§ããïŒ
å°ãªããšããããŒã¿ããŒã¹ã«ã¯JSONããããŸãããã¡ãããç§ãã¡ã¯åœŒãããŸãéå¶ãããããã€ãã®æç¹ã§ãã§ãã¯ããããšä¿¡ããŠããŸãããã ãã圢åŒã¯å°ã倿Žãããå¯èœæ§ããããŸããå ±åŸ©æªçœ®ãè¬ããããã«ãããã³ããšã³ããå£ãããããšã©ãŒãããã«èŠã€ãããããŠã¯ãªããŸããã
æç€ºçã«å ¥åããã«ãµãŒããŒäžã«PythonããããŸããããã§ããå°ããªåé¡ãçºçããããšããããŸãããŸããæ éããªãããã«ãäžãäžã®å Žåã«åããŠãç°¡åã«ç¢ºèªããããã«å®å šã確ä¿ããããšãã§ããŸãã
ãµãŒããŒã®å¿çã«é¢ããæç¢ºãªããã¥ã¡ã³ãã¯ãããŸãããããããããµãŒããŒã¯ã圌ãäžãããã®ããããåœŒã«æ¥ããã®ã«ã€ããŠããå¿é ããŠããŸããã¯ããããã¯ç§ãã¡ã®åé¡ã§ã-å£ããªãã§ãã ããã
äœãèŠã€ããŸãããïŒãã§ã«å°ã䜿ãå§ããŠããŸãããµãŒããŒã空ã®é åã§ã¯ãªã空ã®ãªããžã§ã¯ããæäŸããããšãããããŸããã空ã®ãªããžã§ã¯ããè¿ãããã«æžãããã³ãŒãã調ã¹ãŸããã
ããã«-ããã€ãã®ãã£ãŒã«ãããããŸããããããã¯å¿ é ã§ãããšèããŸãããããªãã·ã§ã³ã§ããããšã倿ããŸããã
nullå¯èœãªãã£ãŒã«ããåã«æ¬ èœããŠããå ŽåããããŸãããã€ãŸãããªãã·ã§ã³ã®ãã£ãŒã«ãã¯ãåã«æž¡ããªãå Žåãšnullãæž¡ãå Žåã®2ã€ã®æ¹æ³ã§è¡šç€ºã§ããŸãããŸããããã¯å¿ ãããæ£ããç§ãã¡ã«å±ããããã§ã¯ãããŸãããã³ãŒãã®éäžã§ãšã©ãŒããã£ããããªãããã«ããããã«ããªã¯ãšã¹ãæã«ããããã£ããã§ããŸãã
ç§ãã¡ã¯ä»äœãæã£ãŠããŸããïŒãµãŒããŒããã®å€ãã®å¿çããã§ã«ç¢ºèªããæ°ã«å ¥ããªãå Žåã¯ãã°ã«èšé²ããŸãããæ¬¡ã«ããããåæããŠã¿ã¹ã¯ãèšå®ããŸããããã³ããšã³ãã§ã®å ¥åã倿Žããããããã¯ãšã³ãã§ç·šéããŸããããã§ã¯ããµãŒããŒããã®ããŒã¿ã倿ŽããŸãããæååã®ä»£ããã«nullãéä¿¡ãããå Žåãããšãã°ãç©ºã®æååã«å€æŽããŸããã
ç§ãã¡ã®èšç»ã¯ãã§ãã¯ããŠãã°ã«èšé²ããããšã§ããããšã©ãŒãããã°ä¿®æ£ããŠãã ããã誀ã£ãããŒã¿ãåãåã£ãå Žåã¯ããã®å€ãä¿®æ£ããŠããŠãŒã¶ãŒãã³ãŒãå ã«å ¥ã代ããã«å°ãªããšãäœãã衚瀺ã§ããããã«ããŸãã
å°ããªçµæãTypeScriptãããå€ãã®ããšãå©ããasãanyãããã³æå笊ãé€å€ããããã«ãstrictããªã³ã«ããŸããTypeScriptã®é åãšãªããžã§ã¯ãã«ã¯ããã«æ³šæãæãããã¹ãŠã®å€éšããŒã¿ããã§ãã¯ããŸããã¡ãªã¿ã«ããããã¯ãµãŒããŒã ãã§ã¯ãããŸããããŸããã€ãã³ãã§åä¿¡ãããã¡ãã»ãŒãžã§ããlocalStorageã確èªããããšãã§ããŸããããšãã°ãpostMessageã
ãæž èŽããããšãããããŸããã