ãŸãã¯ãå¿é ãæ¢ããŠã³ã³ãã€ã©ãä¿¡é ŒããããšãåŠãã æ¹æ³
Brendan Eichãããã10æ¥éã§Netscape Navigator 2.0çšã®JavaScriptã®æåã®ããŒãžã§ã³ãäœæãããšãã圌ã¯Slack Desktopã¢ããªãæ¬çºæãã©ã®çšåºŠäœ¿çšããããã»ãšãã©äºæ³ããŠããŸããã§ããã ãã€ãã£ãã³ãŒããšåžžã«å¯Ÿè©±ããWindowsãmacOSãLinuxã§åäœãããã«ãã¹ã¬ãããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãJavaScriptã³ãŒãããŒã¹ã®ã¿ã䜿çšããŸãã
倧èŠæš¡ãªJavaScriptã³ãŒãããŒã¹ã®ç®¡çã¯ç°¡åã§ã¯ãããŸããã Node.jsã®å¥ã®ã¹ã¬ãããä»ããŠã³ãŒã«ããã¯ãååŸããããã«ãChromeãã©ãŠã¶ãŒã®JavaScript JavaScriptããObjective-Cã«æž¡ãéã«ãªããžã§ã¯ããæž¡ããã³ã«ããã¹ãŠã®ããŒã¹ããŸãšããããŠããããšãä¿èšŒããå¿ èŠããããŸãã ãã¹ã¯ãããã®äžçã§ã¯ãå°ããªãšã©ãŒãã¢ããªã±ãŒã·ã§ã³ã®ã¯ã©ãã·ã¥ãåŒãèµ·ããå¯èœæ§ããããŸãã ãã®ç®çã®ããã«ã TypeScript ïŒéçã«åä»ããããJavaScriptã®ã¹ãŒããŒã»ããïŒãå®è£ ããå¿é ããã«ã³ã³ãã€ã©ãæããŠçããæ¹æ³ãããã«å®çŸããŸããã ç§ãã¡ã ãã§ãªããStack Overflowã®éçºè ãžã®èª¿æ»ã§ã¯ãTypeScriptã3çªç®ã«äººæ°ã®ããããã°ã©ãã³ã°ãã¯ãããžãŒã§ããããšã瀺ãããŠããŸã ã éçåãã§ãã¯ãã©ãã ãé«éã«ãªã£ãŠããã®ããèããŠãçµéšãšæè¡ãå ±æããããšæããŸãã
éç解æãå©ãã«ãªããŸã
以åã¯ã JSDocã䜿çšããŠé¢æ°ã®çœ²åãææžåããŠããŸããã ã³ã¡ã³ãã§ã¯ãã¯ã©ã¹ãé¢æ°ãå€æ°ãé©åã«äœ¿çšããç®çãšæ¹æ³ã説æããŸããã ãã®æ¹æ³ã«ã¯åé¡ããªãããã§ã¯ãããŸããã ã³ãŒãèªäœãèŠããšãJavaScript Promisesã®è§£æ±ºæ¹æ³ãç解ããã®ã¯å°é£ã§ãã ã³ãŒãã®äœæè ããã¹ãŠãæ£ããææžåããåŸã§ã³ãŒããå€æŽãã人ãææžãæ£ããæŽæ°ããããšãä¿¡é Œããå¿ èŠããããŸãã æ°ãåããªãã»ã©ã®ã¢ãžã¥ãŒã«ãšäŸåé¢ä¿ãæã€è€éãªã·ã¹ãã ã§ã¯ãé¢æ°ãèšè¿°ãããŠãããã¡ã€ã«ãéããªããŠããé¢æ°ãç°¡åã«ç Žãããšãã§ããŸãã
ç¶æ³ãæ¹åããããã«ã éçåãã§ãã¯ã®æ©äŒãäžããããšã«ããŸããã éçãã§ãã¯ã¯ã³ãŒãã®å®è¡ãå€æŽããŸããã代ããã«ãã³ãŒããåæããå¯èœãªå Žåã¯åãèšç®ããããã°ã©ã ãéä¿¡ãããåã«éçºè ã«èŠåããŸãã
éçåãã§ãã¯ã¯ã
Math.random()
ãæååã¡ãœãã
toLowerCase()
å«ãŸãªãæ°å€ãè¿ãããšãç解ããŠããŸãã
æå³ãããæ確ã«ç€ºãããã«ããã®ãããªã¿ã€ãã³ã³ãããŒã©ãŒã®ãŠãŒã¶ãŒã¯ããããã®ã¿ã€ããæåã§å®£èšããŠãããã°ã©ã ã®åäœã人ãšãã·ã³ã«äŒããããšã«ãããã·ã¹ãã ãæ¯æŽã§ããŸãã 以äžã®ã³ãŒãã¯ãããŠãŒã¶ãŒããªããžã§ã¯ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãšããŠãŒã¶ãŒã®å¹Žéœ¢ãååŸããããšã«ãªã£ãŠããã¡ãœãããå®çŸ©ããŸãã éçåãã§ãã¯ã¯ããã®ãããªã³ãŒããåæãã
undefined
ããããã£ãåžžã«ååšããã®ãåŸ ã€ãªã©ãå žåçãªäººçãšã©ãŒã«ã€ããŠèŠåããããšãã§ããŸãã
èå³æ·±ãããšã«ãã³ãŒãã¯å®è¡æã«å€æŽãããŸãããã€ãŸããéçåãã§ãã¯ã¯ãšã³ããŠãŒã¶ãŒã«è¿œå ã³ã¹ãã課ããŸããã äžèšã®å®è¡äŸã¯ãå€å žçãªJavaScriptã®ããã«èŠããŸãã
ã¹ããŒãã¿ã€ãã³ã³ãããŒã©ãŒã¯ãã³ãŒãã«å¯Ÿããèªä¿¡ãé«ããããã°ã©ã ãå®çšŒåç°å¢ã«éä¿¡ããåã«äžè¬çãªãšã©ãŒããã£ããããã³ãŒãããŒã¹èªäœãããé©åã«ææžåã§ããããã«ããŸãã
Slack Desktopã³ãŒãããŒã¹ã®TypeScriptãžã®ç§»æ€
éç解æãšã³ã³ãã€ã©ãçµã¿åãããMicrosoft TypeScriptã䜿çšããããšã«ããŸããã ææ°ã®JavaScriptã¯æå¹ãªTypeScriptã§ããã€ãŸãã1è¡ã®ã³ãŒããå€æŽããã«TypeScriptã䜿çšã§ããŸãã ããã«ãããé倧ãªãã°ãæ°ããé¢æ°ã®äœæ¥ãåæ¢ããããšãªããã³ã³ãã€ã©ãŒãšéçåæãæ©ã段éã§æå¹ã«ããããšã§ã段éçãªåä»ãããå®è£ ã§ããŸããã
å®éã«ã¯ãã³ãŒããå€æŽããã«åæãšã³ã³ãã€ã©ãæå¹ã«ãããšãTypeScriptã¯ã³ãŒããããã«ç解ããããšããŸãã ãµãŒãããŒãã£ã®äŸåé¢ä¿ã«äœ¿çšã§ããçµã¿èŸŒã¿åãšåå®çŸ©ã䜿çšããŠãã³ãŒãã®ãããŒãåæãã誰ãæ°ä»ããŠããªã埮åŠãªãšã©ãŒãææããŸãã TypeScriptãã³ãŒããç解ã§ããªãå Žåã
any
ãšåŒã°ããç¹å¥ãªåãæ³å®ããããã«å ãžé²ã¿ãŸãã
æåã®èšç»ã§ã¯ããã¡ã€ã«ã1ã€ãã€ãã£ãããšç§»æ€ããå¯èœãªå Žåã¯ããå ·äœçãªåå®çŸ©ã䜿çšããŠæšæºJavaScriptãæ¡åŒµããŸãããã€ã³ã¿ãŒãã§ã€ã¹ãè¿œå ããã¯ã©ã¹ã¡ãœããããã©ã€ããŒããŸãã¯ãããªãã¯ãšããŠå®çŸ©ããåæåã宣èšããŸããã ãã®éçšã§ãäºæããªã2ã€ã®çºèŠããããŸããã
ãŸã ãã³ãŒãå€æäžã«èŠã€ãã£ãå°ããªãã°ã®æ°ã«é©ããŸããã åãã§ãã¯ã䜿çšãå§ããä»ã®éçºè ãšè©±ãããŠãããããã¹ãŠã®äººã«èµ·ããããšãåãã§èããŸããïŒäººãæžãè¡ãå¢ããã»ã©ãããããã£ã§ã¿ã€ããã¹ãããããšã¯é¿ããããªããªãã芪ãŸãã¯ãã¹ãããããªããžã§ã¯ãã¯äžå®ã§ãããšä»®å®ããããéæšæºãšã©ãŒãªããžã§ã¯ãã䜿çšããŸãã
第äºã« ããšãã£ã¿ãŒãšã®çµ±åãã©ãã»ã©åŒ·åããéå°è©äŸ¡ããŸããã TypeScriptèšèªãµãŒãã¹ã®ãããã§ããªãŒãã³ã³ããªãŒããšãã£ã¿ãŒã¯ç¶æ³äŸåããã°ã©ãã³ã°ããµããŒãã§ããŸãã TypeScriptã¯ãç¹å®ã®ãªããžã§ã¯ãã§äœ¿çšã§ããããããã£ãšã¡ãœãããç解ããããããšãã£ã¿ãŒãç解ã§ããããã«ãªããŸããã ãªãŒãã³ã³ããªãŒãã·ã¹ãã ã¯ãçŸåšã®ããã¥ã¡ã³ãã®åèªã®ã¿ãèŠæ±ããŸããããã®åŸã¯ébarã«èŠããŸãã Electron BrowserWindowã§å©çšå¯èœãªã€ãã³ããGoogleã§å床æ€çŽ¢ããããšããããŸãã Atom ã Visual Studio Code ã Sublimeãããã³ä»ã®ã»ãšãã©ãã¹ãŠã®ãšãã£ã¿ãŒçšã®ãã©ã°ã€ã³ããããŸãã ãšãã£ã¿ãŒã§çŽæ¥ã³ãŒãããã¹ãããæ©èœã«ãããããã«çç£æ§ãåäžããŸããã
ä»åŸãã³ãŒãã®ãµããŒãã«ã€ããŠèããTypeScriptãåãå·»ããšã³ã·ã¹ãã ã倧åã«ããŸãã Reactããã³Node / npmãšã³ã·ã¹ãã ã®ã¢ã¯ãã£ããŠãŒã¶ãŒãšããŠã®ç§ãã¡ã«ãšã£ãŠã倧ããªãã©ã¹ã¯ãµãŒãããŒãã£ã©ã€ãã©ãªã®åå®çŸ©ã®å¯çšæ§ã§ãã ã€ã³ããŒããããã©ã€ãã©ãªã®å€ãã¯ããã§ã«TypeScriptãšäºææ§ããããŸãã å®çŸ©ãã¢ãžã¥ãŒã«èªäœã«ä»å±ããŠããªãå Žåã¯ãããããçŽ æŽãããDefinitelyTypedãããžã§ã¯ãã§èŠã€ããããšãã§ããŸãã ããšãã°ãReactã«ã¯ã¿ã€ãå®çŸ©ãä»å±ããŠããŸããããåçŽãª
npm install @types/react
ã䜿çšããŠ
npm install @types/react
ãããè¿œå ã®æ§æã¯å¿ èŠãããŸããã
TypeScriptã«ããå®å®æ§ãšå®å¿ãåäžããããã移è¡éå§åŸæ°æ¥ä»¥å ã«ããã¹ãŠã®æ°ããã³ãŒãã«äœ¿çšããããã«ãªããŸããã Slackãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã®JavaScriptã³ãŒãã®å€§éšåã«æ³šéãä»ããã«ã¯ãçŽ6ãæããããŸããã
ä¿¡é Œã³ããã
èªã¿ããããšä¿å®æ§ãåäžãããããã«ãéçºç°å¢ã®ãã¹ãŠã®ã³ãŒãã¯ã³ãããåã«TSLintã«ãã£ãŠèªåçã«ãã§ãã¯ãããŸã-ããã¯ãGitã«å€æŽãè¿œå ããåã«ãã«ãŒã«ã«åŸã£ãŠã³ãŒããæåã«èª€ã£ãåŒããã§ãã¯ããããšãæå³ããŸã
implicit any
ãªãã·ã§ã³ã®äœ¿çšã¯èš±å¯ãããŠããŸãããã€ãŸããTypeScriptãèªåçã«æ€åºã§ããªãå Žåããã¹ãŠã®Slack Desktopã³ãŒãã§æ瀺çã«åãæå®ããå¿ èŠããããŸãã
ãã©ã³ãã«å€æŽãéä¿¡ãããšããæ¥ããšãGitã¯æåã«ã³ãŒãããŒã¹å šäœãTypeScriptã³ã³ãã€ã©ãŒã«æž¡ããŸããTypeScriptã³ã³ãã€ã©ãŒã¯ããã¹ãŠã®ã³ãŒãã®æ§é çããã³æ©èœçãšã©ãŒãåæããasync / awaitãªã©ã®ææ°æ©èœãES2016äºæã³ãŒãã«å€æããŸãã ãã«ãªã¯ãšã¹ããéããããŸã§ã«ãã³ãŒãã®æ§é çãªäŸåé¢ä¿ãæ£ãããšç¢ºä¿¡ããŠããŸãã
æããããããŸãã
ç§ãã¡ã«ãšã£ãŠãTypeScriptã®å©ç¹ã¯ãååšããæ¬ é¥ãããåçã«éèŠã§ãã ç§ãã¡ã«ãšã£ãŠæãå ·äœçãªãã®ã¯ããã¬ãŒãã³ã°ã®ã³ã¹ãã§ãã éåžžã匷åãªã¿ã€ãã³ã°èšèªã䜿çšããéçºè ã¯1ã2æéæ§æãåŠç¿ããŸããããTypeScriptã®ãã¹ãŠã®æ©èœãåãããã¡ã€ã«ã¯ãçŽç²ãªJavaScriptã®çµéšããæããªãããã°ã©ããæããšã©ãŸãããããšããããŸãã
ãã®åé¡ã®æãæãããªè§£æ±ºçã¯ãå€æŽããã£ãããšå±éããããšã§ã-ã³ãŒããå€æŽããã«TypeScriptã䜿çšããããã€ãã®åçŽãªå宣èšãè¿œå ããç¶æ¿ããã©ã¡ãŒã¿ãŒåãããåãé«åºŠãªåïŒäº€å·®ããããã³ã°ãããåïŒãªã©ã®ããè€éãªæŠå¿µãæ®ãããšãã§ããŸãç¹å®ã®ã¢ãžã¥ãŒã«ããŸãã¯ã¿ã€ãã³ã°ã®åŸã®æ®µéã æçµçã«ãTypeScriptã®æå°éã®äœ¿çšã§ãå€ãã®å©ç¹ãåŸãããããšãçµéšã«ãã瀺ãããŠããŸãã
ãè¿ã
Slackã§ã¯ããªãŒãã³ãœãŒã¹ã³ãã¥ããã£ã®ãŸãšããªã¡ã³ããŒã«ãªãããåªããŠããŸãã æçµçã«ãä»ã®éçºè ã«ãšã£ãŠTypeScriptãããç°¡åã«ããããšèããŠããŸãã ã®ã£ãããèŠã€ãã£ãå ŽåãããããåããããšããŸãã
ãŸããSlackç¬èªã®
electron-compile
ããã±ãŒãžã«ãããElectron Appséçºè ã¯
electron-compile
ãæ°ã«ããã«TypeScriptã§èšè¿°ã§ããŸãã SlackãNetflixãGitHubãªã©å€ãã®äŒæ¥ã§ç©æ¥µçã«äœ¿çšãããŠããReactive Extensionã©ã€ãã©ãªã§ããRxJSã¯ãSlackã®æ¯æŽãåããŠTypeScriptã«åãæ¿ããŸããã éçºè ãäœæããå°ããªã©ã€ãã©ãªã®å€ãã¯ãTypeScriptã®ãµããŒããåŸã ã«åããŠããŸãïŒ spawn-rx ã electron-spellchecker ã electron-remote ã electron-notification-state ã electron-windows-notificationsãªã© ïŒã
TypeScriptã®äœ¿çšãéå§ããã«ã¯ã å ¬åŒã¬ã€ããåç §ããŠãã ãã ã å®éã«å°ããªç§»æ€ãããžã§ã¯ããã©ã®ããã«èŠããããç¥ãããå Žåã¯ãspawn-rx portãèŠãŠãã ãã ã Electronã¢ããªã±ãŒã·ã§ã³çšã®æåã®TypeScriptã©ã€ã³ãäœæãããå Žåã¯ãããã«é»åã³ã³ãã€ã«ãšTypeScriptãµããŒããå®è£ ãã壮倧ãªelectron-forgeã䜿çšããŠãã ãã-åªããReact / TypeScriptãã³ãã¬ãŒããä»å±ããŠãããããç§ãã¡ã®ã¢ãŒããã¯ãã£ã¯ãã®éçºããŒã Slack DesktopããšãŠãæ°ã«å ¥ã£ãŠããŸãã ã¯ãã¹ãã©ãããã©ãŒã ã¢ããªã±ãŒã·ã§ã³ãéçºããããã«ãææ°ã®Webãã¯ãããžãŒãšãã€ãã£ãã³ãŒããçµã¿åãããããšããšããµã€ãã£ã³ã°ãªä»äºã§ãããšæãããå Žåã¯ããã²ãååãã ãã ïŒ