æªè§£æ±ºã®è³ªå
document.all
ã¯ãã©ã®ãããªç¹æ®ã±ãŒã·ã³ã°ãååŸããå¿
èŠããããŸããïŒCïŒããã³ãã®ä»ã®èšèªã«ã¯ããªããžã§ã¯ãéå±€ã®ä»»æã®ãã€ã³ãã§null
ïŒãŸãã¯ãã®å Žåã¯undefined
ïŒãæ€åºãããå¯èœæ§ã®ããããããã£ãã§ãŒã³ã«ã¢ã¯ã»ã¹ããããã®ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒããããŸãã
var x = { y: { z: null, q: undefined } };
console.log(x?.y?.z?.foo); // Should print 'null'
console.log(x?.baz); // Still an error
console.log(x.y.q?.bar); // Should print 'undefined'
ã¢ã¯ã»ãµã®å¯äœçšã念é ã«çœ®ããŠãæ£ç¢ºã«äœãã³ãŒãã£ã³ã°ããå¿ èŠããããã«ã€ããŠã®ææ¡ãå¿ èŠã§ãã
@DanielRosenwasserã«ããç·šé2018幎2æ27æ¥ïŒãã®ææ¡ã¯ããã«äŒæãæŒç®åãšãåŒã°ããŸãã
ãããã£ãŠãæåã®äŸã§ã¯ã次ã®ããã«åºåããå¯èœæ§ããããŸãã
x && xy && xyz && xyzfoo
ããããã©ãããããããxãyãzãããã³fooãããããæ倧ã§1åè©äŸ¡ããå¿ èŠããããŸãã
ãŸããå€ãã®å Žåãå®éã«ã¯&&
ãå®è¡ã§ããŸãããããã¯ãããªããã£ãã«ãšã£ãŠçå®æ§ãå°ãåé¡ã«ãªãããã§ãã
äŸãã°ïŒ
" "?.trim()?.indexOf("hello")
""
ãäžããŸãã
ãããã£ãŠãåã·ã¹ãã ãå©çšããªãéããäžè¬çãªã±ãŒã¹ã§ã¯==
$ã䜿çšããŠnull
ãšæ瀺çã«æ¯èŒããå¿
èŠããããŸãïŒãããèŠããšããªãã¯ãŒã«ã§ãïŒã
ãããããmonadic-bindé¢æ°ïŒJSåºåã«ã¯ãããã§ã¯ãããŸããïŒãçºè¡ããããäžé æŒç®åïŒéåžžã®JSã®åçç©ã«è¿ãïŒã§äœããã®å€æã䜿çšããããšãã§ããŸãã ç§ã¯æããã«åŸè ã«å°ãåã£ãŠããŸãã
ããã«ã€ããŠã®esdiscussã§ã®è°è«ã¯ã»ãšãã©ãããŸããã§ããïŒ
ïŒ+1ïŒ
å®éã«0
/ ""
ã䜿çšãããã©ããã«ã€ããŠã®æ£ç¢ºãªã»ãã³ãã£ã¯ã¹ã«ã€ããŠã¯ããããæèŠã®çžéããããããES7ïŒãŸãã¯ES8ãŸãã¯ES9ãŸãã¯...ïŒã§æåã«ãããå®è£
ããã®ãçæ³çã§ããããã§ã®æŒç®åã®ç®çã®ããã®åœã®ããªããã£ããšããŠã®
ïŒ+1ïŒTypeScriptãESxxãåŸ ããã«ãããæåã«ååŸããããšãæãã§ããŸãã
ãïŒãã®ãããªåçŽã§ãã¡ããã¡ã䟿å©ãªnull-safetyæŒç®åãšããäºå®ã ãããŠãïŒïŒãES6ä»æ§ã«å«ãŸããŠããªããšããããšã¯ãES6ä»æ§ããŸãšãã人ã ãæ¥ãããããã«é ãäžããŠããã¹ãã§ããããšãæå³ããŸãã ããã¯éåžžã«åçŽã§æçœãªããšãªã®ã§ããããçµã¿èŸŒãŸãªãããšã¯ççŽã«èšã£ãŠéåžžèã§ãã ã»ãšãã©ã®çŸä»£èšèªããããããµããŒãããçç±ããããŸãïŒãããã¯äžå¯æ¬ ã§ãã
ããã¯çŸåšã®ä»æ§ããã®éžè±ã§ãããšç§ã¯ç解ããŠããŸãïŒçŸåšã®ä»æ§ã¯ãããçç¥ããŠããã»ã©è¿èŠçŒçã§ããããïŒã ããããããã¯ãšãŠã€ããªã䟿å©ãªã®ã§ããã®åäžã®éžè±ã¯æ£åœåããããšæããŸãã TSéçºè ã®å€§å€æ°ïŒVASTïŒã¯ããããæçµçã«ESä»æ§ã«è¿œå ãããå ŽåããŸãã¯ãã®ãšãã«ãå®è£ ãžã®å°ããªå€æŽã®åœ±é¿ãåããŸããã ãããæäŸãã倧ããªã¡ãªããã¯ãããäžéšã®éçºè ã«å°æ¥çã«åœ±é¿ãäžããå¯èœæ§ããã䟡å€ããããŸãã ãããŠãç¬ããã»ã©é ãESä»æ§ããã»ã¹ãèãããšãããã¯ïŒå°ãªããšãïŒæ°å¹Žéã¯ãŸã£ããåé¡ã«ãªããŸããã
ç§ã¯brain428ã«å®å šã«åæããŸã
@ brian428ããã§ã®åé¡ã¯ããã®æŒç®åãES7ã«å®è£ ãããŠããå¯èœæ§ããããããtypescriptãæçµçãªES7ã®ä»æ§ãšã¯ç°ãªãä»æ§ã«ãªã£ãŠããå Žåã誰ãæºè¶³ããªãããšã§ãã
ããã§ã®åé¡ã¯ããã®æŒç®åãES7ã«å®è£ ãããŠããå¯èœæ§ããããããtypescriptãæçµçãªES7ã®ä»æ§ãšã¯ç°ãªãä»æ§ã«ãªã£ãŠããå Žåã誰ãæºè¶³ããªãããšã§ãã
TypeScriptã¯ãESã®æ¹åæ§ã«åœ±é¿ãäžããããã®æçšãªãã¹ãããããšãªããããå°æ¥ã®ESããŒãžã§ã³ã«_æœåšçã«_ïŒãŸãã¯ããã§ãªãïŒå¯èœæ§ã®ããæ©èœãå®è£ ããæ¹ããããç©æ¥µçãªã¢ãããŒãã ãšæããŸãã
TypeScriptã®åœ±é¿ãåããŠããESãã£ã¹ã«ãã·ã§ã³ã®äŸã次ã«ç€ºããŸãã
ã³ã³ã¹ãã©ã¯ã¿ãŒã®ãã©ã¡ãŒã¿ãŒã®1ã€ã«ãã©ã€ããŒããã¬ãã£ãã¯ã¹ãä»ããŠå®£èšããã³åæåããTypeScript ...ãªãã·ã§ã³ã¯ãå€ãã®éçºè ã«åœ¹ç«ã¡ãŸã
ããã«ãESãTypeScriptã«ãã§ã«ååšããæ©èœãæ¡çšããããšã¯ç¢ºãã«å¯èœã§ãããã»ãã³ãã£ã¯ã¹ã¯ç°ãªããŸãïŒããšãã°ãã¢ãžã¥ãŒã«ã®åäœæ¹æ³ãªã©ïŒã
ESãTypeScriptã«ãã§ã«ååšããæ©èœãæ¡çšããããšã¯ç¢ºãã«å¯èœã§ãããã»ãã³ãã£ã¯ã¹ã¯ç°ãªããŸã
ããã¯ææªã®ã·ããªãªã§ãããšåºãèããŠããããšã«æ³šæããŠãã ããã TypeScript 1.0ã宣èšããåã«ãES6ã®ã¢ãžã¥ãŒã«ãå®æããããã£ãã®ã§ãããå§å¡äŒã®ã¹ã±ãžã¥ãŒã«ã®é ãã«ããããããã§ããŸããã§ããã ããã¯ãç¹°ãè¿ãããã®ã§ã¯ãªããé¿ããã¹ããã®ã§ãã ES7 +ã«ãªãå¯èœæ§ãæ倧0ïŒ ïŒã¿ã€ãã¢ãããŒã·ã§ã³ãªã©ïŒã§ããããç°¡åã«å®çŸ©ãããã»ãã³ãã£ã¯ã¹ïŒå€ªãç¢å°ã2ã§ããå Žåãªã©ïŒã§æ©èœããå¯èœæ§ãæ倧100ïŒ ã®æ©èœãããããããããšèããŠããŸããæ°å¹ŽåïŒã æ°ãããªãã¬ãŒã¿ãŒã¯åä»ãªäžéã«é¥ãå¯èœæ§ããããŸãã
ææªã®å ŽåãES7ãç°ãªãå Žåãã³ã³ãã€ã©ãã©ã°ã¯ã¬ã¬ã·ãŒTSå®è£ ããµããŒãããç¶äºæéãæäŸã§ããŸããïŒ ãããšæ確ãªç§»è¡ããã¥ã¡ã³ããçµã¿åãããããšã§ãéçºè ã¯æ°ããæšæºãžã®ç°¡åãªã«ãŒããæäŸã§ããã¯ãã§ãã
æçµçã«ããã®ãããªæ©èœã®äœ¿çšã¯ããã¡ããã¡ã䟿å©ã§ãããéçºè ã«ãšã£ãŠå¿ é ã§ã¯ãããŸããã TSã¯ããã®äœ¿çšæ³ã®æœåšçãªå°æ¥ã®åœ±é¿ãåæ¥ããååã«æããã«ããå¿ èŠããããŸãã æœåšçãªãããŒãžããªãã¡ã¯ã¿ãªã³ã°ã®ã¢ã€ãã¢ã¯å¥œãã§ã¯ãããŸããã䜿çšããªãã§ãã ããã ããããããã®ã¡ãã»ãŒãžã匷å¶ããããã®ãªããã€ã³ã³ã³ãã€ã©ãã©ã°ã§ããïŒ
TSã¯ESã«åœ±é¿ãäžããããšæã£ãŠæŽããã¹ãã§ã¯ãããŸãããããã®ãããªå°ããªå€ç«ããã±ãŒã¹ã§ã¯ãTSãå®å šã«æ¥ãããããã®ã¯æ®å¿µã§ãã
ãã¶ããããã«é¢ããã¹ãããŒãã³ã®ææ¡ããŸãšããŠã-harmonyãã©ã°ïŒãŸãã¯ãã®ãããªãã®ïŒã®èåŸã«ãªãã¡ã¬ã³ã¹å®è£ ã眮ãããšãã§ããŸãã ããããã°ããã®æ©èœã®ES7éçºãæšé²ã§ããŸãã
ç¹°ãè¿ãã®ã«ãã¯ã¢ããã«ããå¯äœçšãé²ãããã«ãã³ã³ãã€ã©ãŒã¯äžæå€æ°ãåºåããå¿ èŠããããŸãã
($tmp0 = x, $tmp0 === void 0 ? void 0 :
($tmp1=$tmp0.y, $tmp1 === void 0 ? void 0 :
($tmp2 = $tmp1.z, $tmp2 === void 0 ? void 0 : $tmp2)))
ãŸãã¯ã Proxy
ã«åºã¥ãã¡ã¢åã¡ã³ãã¬ã³ã䜿çšããŸãã
ã«ããŽãªã®èŠ³ç¹ããã¯ãããã¯ããããã£ã«ãã¯ã¢ããã«é©çšãããã¢ããã§ããå¯èœæ§ãããããããã¹ãŠã®ããããã£ã«ãã¯ã¢ãããæªå®çŸ©ãè¿ãå¯èœæ§ãããèšèªã«ãšã£ãŠã¯éåžžã«èªç¶ãªæ©èœã§ãã ES7ãäžèšã®ã³ãŒãã§èª¬æãããŠãããã®ä»¥å€ã®ã»ãã³ãã£ã¯ã¹ãæ¡çšããå Žåã¯é©ããŸãã
codeplexã®åé¡ã«ã¯ããªãã®æ°ã®ç¥šããããŸããïŒ61ïŒ
atom-typescriptã«atom
ã䜿çšããæéã軜æžããããã«ãããã¯æ¬åœã«ã²ã©ãå¿
èŠã§ãã
ããã¯ãcoffescriptã³ãŒãã§ã¯éåžžã«æ
£çšçã§ãïŒãã ãã決å®è«ãåä»ãª?
ãããåªããŠããã®ã§äººæ°ããªãããã«ããããšæããŸãïŒã coffescriptãã¡ã€ã«ãç¹ã«ã¹ããŒã¹ãã³ã®ããã«DOMãšçŽæ¥é£æºãããã¡ã€ã«ïŒãã¥ãŒãç Žæ£ãããåŸããŸãã¯ãã¥ãŒãã¢ã¿ãããããåã«é¢æ°ãå®è¡ã§ãããã¡ã€ã«ïŒãéããšãèšå€§ãªæ°ã®?
ã®äœ¿çšæ³ãèŠã€ãããŸãã ããšãã°ããã®ãã¡ã€ã«ã«ã¯16
httpsïŒ//github.com/atom-community/autocomplete-plus/blob/f17659ad4fecbd69855dfaf00c11856572ad26e7/lib/suggestion-list-element.coffeeããããŸã
ç¹°ãè¿ãã«ãªããŸããããããå¿
èŠãªã®ã¯å¥œãã§ã¯ãããŸããããJavaScriptã®ç¶æ
ã§ããã100äžãã«ããã?
ã®æ¹ãããã§ãif( && fest ) { then }
ããããã³ãŒããèªã¿ãããããããã«æ¬åœã«å¿ èŠã§ãã ãŸããXHRãå®äºãããã€ãžã§ã¹ãã«ãŒããè§åºŠã§å®è¡ãããã®ãåŸ ã£ãŠãããšãã«ãããããå¿ èŠãã«ãªãããšããããããŸãã
ããŠãã¹ã¬ãããèªãã§ããªãåŸ ã£ãŠããã®ãã確èªããŸããã ç§ã¯_ããæ¯_ãç解ããŠããŸãã
we'd have to somehow make x, y, z, and foo each evaluate at most once.
Coffeescriptã¯ããã€ãã®æé©åãè¡ããŸããããšãã°ãäžéã¢ã¯ã»ã¹çµæãä¿åããŸãã
typeof foo !== "undefined" && foo !== null ? (ref = foo.bar) != null ? ref.baz() : void 0 : void 0;
ïŒç§ã¯undefined
ãã§ãã¯ãtypescriptã«ã¯äžèŠã ãšåŒ·ãæããŠããŸãïŒtypescriptã«ãã£ãŠvar
initã¿ã€ããã§ãã¯ãå¿
èŠãªã®ã§ïŒ
+1
ä»æ¥ã®ãã¥ãŒã¹ã§ã¯ãããŒãã¯ããã«å¯Ÿããå ¬åŒã®ãµããŒããåããŠããŸãïŒ https ïŒ//github.com/gbracha/nullAwareOperators/blob/master/proposal.md
éåžžã«éèŠãªæ©èœã
ãããããªãã¶ãŠã©ãŒã«ã®ã¢ã€ãã¢ã§ãããããŒä»ãããããã£ã¢ã¯ã»ã¹ã§æ©èœãåŠçããŠãåé¡ãªããšèª°ããå€æããå Žåããã®æ©èœã®ã³ãŒãçæã¯å¯äœçšãªãã§éåžžã«ç°¡åã«å®è¡ã§ããŸãã
if (aaa?.bbb?.ccc) {}
ã«ã³ã³ãã€ã«ã§ããŸã
if (__chain(aaa, "bbb", "ccc")) {}
__chain
é¢æ°ã¯ã __extends
ãšåæ§ã«çºè¡ããå¿
èŠããããŸãã __chain
é¢æ°ã¯ã arguments
é
åãå埩åŠçããã ãã§ã次ã®ã¡ã³ããŒãinstanceof Object
ã§ãªãå ŽåããŸãã¯ã¡ã³ããŒåãå«ãŸããŠããªãå Žåã«null
ãè¿ããŸãã é¢æ°åŒã³åºãã¯ãé
åããã©ã¡ãŒã¿ãŒãšããŠæž¡ãããšã§ïŒãããŠãå
éš.apply()
ã䜿çšããŠïŒåŠçã§ããããã...
if (aaa?.bbb?.ccc?(1, 2, 3)) {}
ã«ã³ã³ãã€ã«ã§ããŸã
if (__chain(aaa, "bbb", "ccc", [1, 2, 3])) {}
ããã«ãããé·ããã§ãŒã³ã®å Žåã§ããçæãããJSãããªãæ £çšçã«ãªããŸãã
æããã«æŽç·Žãå¿ èŠã§ã...ããããããããããã«äœãããããŸããïŒ
aaa?.bbb?.ccc?
ãa.b.c
ã®å€ãè¿ãå Žåããã¹ãŠã®å°éå
·ãååšãããããé¢æ°ã§ããå Žåã¯ãã§ããŸããã§ãã
if (aaa?.bbb?.ccc?(1, 2, 3)) {}
ã«ã³ã³ãã€ã«ãã
if (__chain(aaa, "bbb", "ccc")(1, 2, 3)) {}
ïŒ
@metaweta ïŒããªãã®ãœãªã¥ãŒã·ã§ã³ã¯void 0
ããã§ãã¯ããã ãã§ã...ãã®ãããªçš®é¡ã®æ©èœã®ç®çãæã¡è² ãããŸãããïŒ
ããã¯ã©ãã§ããïŒ
var result = one?.two?.three;
çæïŒ
var $a, $b, $c;
var result = $a = one, $b = $a ? $a.two : void 0, $b ? $b.three : void 0;
ç§ã¯ããããã¹ãŠã®ã±ãŒã¹ãåŠçãããšç¢ºä¿¡ããŠããŸãã é¢æ°åŒã³åºãã«ã¯ããããinstanceof Function
ãã§ãã¯ãå¿
èŠã§ãã
ïŒäºæããªãããŒã«ã«å€æ°ãæŸåºããããšããããã§ã®ãã€ããŒãªæ¬ ç¹...å€åIIFEã§ã©ãããããå¯èœæ§ããããŸãïŒ
@ kevinb7 ïŒ ccc
ãé¢æ°ã§ãªãå Žåã¯ã©ããªããŸããïŒ èª¬æããã³ãŒãã§ã¯ã __chain
ã¯åžžã«æå¹ãªé¢æ°ãè¿ãå¿
èŠããããŸããããããªããšãTypeErrorãçºçããŸãã
@ Back-ioããããã£ãååšããªãå Žåãã«ãã¯ã¢ããã¯undefined === void 0ãè¿ããŸãããœãªã¥ãŒã·ã§ã³ã¯ã空ã®æååããŒããªã©ã®èª€ã£ãå€ã®ããããã£ã®ã«ãã¯ã¢ããã«å€±æããŸãã
@metaweta ïŒããããããã§ã¯ãããŸããïŒhttpïŒ //jsfiddle.net/25LppbL6/
ãŸããäžéšã®äººã ã®ãªã³ã¿ãŒãããã«å¯ŸããŠèŠåããŠãããšããäºå®ã®ããã«ãTSããŒã ã¯ç·©ãå¹³çã䜿çšããããšã«å€¢äžã§ã¯ãªããšæããŸãã
@ Back-ioã¯ããããã§ãïŒhttpïŒ //jsfiddle.net/25LppbL6/2/
@ Back-io nullã«é¢ããŠã¯ãaïŒ.bã®æå³ãããã»ãã³ãã£ã¯ã¹ãäœã§ãããããããŸããã ãããããã£bãå®çŸ©ãããŠããå Žåã¯ããã䜿çšãããã®å Žåãç§ã®ã³ãŒãã¯ã»ãŒæ£ããã§ãã nullãååŸããå¯äžã®æ¹æ³ã¯ãnullã«å²ãåœãŠãããŠããå Žåã§ããããã¯ãååšããªãããããã£ã®ã«ãã¯ã¢ãããæªå®çŸ©ãè¿ãããã§ãã ããããã£ã¯ååšãããæªå®çŸ©ã«èšå®ãããŠããå Žåã¯ãã£ããã§ããŸããã å®å šã«æ£ããããã«ã¯ãvoid 0 === undefinedãšæ¯èŒãã代ããã«ãObject.hasOwnPropertyïŒïŒã§ãã§ãã¯ããŸãã
ã»ãã³ãã£ã¯ã¹ããããããã£bãçå®ã§ããå Žåã¯ããã䜿çšãããã§ããå Žåãã³ãŒãã¯åé¡ãªããJSã€ãã£ãªã ãšããçšåºŠäžèŽããŸãã
ããŒã...äœãã足ããªãå Žåãé€ããŠ...ãã£ãã«ã«å ããå€æŽã¯ãç§ãæ£ããããšãããã«èšŒæããŸã... var result
ã¯ã3ã€ã®ã±ãŒã¹ãã¹ãŠã§ãŸã undefined
ã§ãã ãããŠãåå§çãªãããã¿ã€ããæ¡åŒµããããšã«ãã£ãŠãããªããã©ã®ãããªã±ãŒã¹ãæèµ·ããããšããŠããã®ãããããŸãã...
ãã®æ©èœã®åäœã¯ããšã©ãŒãçæããã®ã§ã¯ãªãã void 0
ã§ç絡ããããšã«ãªããšç¢ºä¿¡ããŠããŸãã ïŒã¡ã³ããŒãèŠã€ãããªãå Žåã¯åžžã«void 0ãè¿ãå¿
èŠããããšããäžèšã®ã¢ã€ãã¢ãæ°ã«å
¥ã£ãŠããŸãïŒã
''?.toString
ã®æå³ãããåºåã¯äœã§ããïŒ
@ kevinb7 ïŒcccãé¢æ°ã§ãªãå Žåã¯ã©ããªããŸããïŒ èª¬æããã³ãŒãã§ã¯ã__ chainã¯åžžã«æå¹ãªé¢æ°ãè¿ãå¿ èŠããããŸããããããªããšãTypeErrorãçºè¡ãããŸãã
ããèŠç¹ãã
@metaweta ïŒã»ãšãã©ã®äººãtoString
é¢æ°ãžã®åç
§ãæåŸ
ããŠãããšæããŸãã®ã§ãããªãã®ãã€ã³ããããããŸãã0ãfalseãã®ãããã¿ã€ãã¡ã³ããŒã«ã¢ã¯ã»ã¹ããŠããå Žåã¯å€å°å£ããŸãããŸã ''ã
ïŒ+1ïŒ
Angular2ã¯ãã³ãã¬ãŒãæ§æã«ãšã«ãã¹æŒç®åãè¿œå ããŸãã
@metaweta ïŒ
''ïŒãtoStringã®æå³ãããåºåã¯äœã§ããïŒ
''?.toString()
ãæå³ããå Žåã¯ã次ã®ããã«ãªããŸãã
if ('' != null) {
''.toString();
}
ãã¶ããããã«ã€ããŠã¹ãããŒãã³ã®ææ¡ããŸãšããããšãã§ããŸã
@ kevinb7ãã§ã«ååšããŸãïŒ http ïŒ//wiki.ecmascript.org/doku.phpïŒid = strawmanïŒexistential_operator
ç¹å¥ãªå ŽåãšããŠPropertyAccessExpression
ã®äžã«ãããå®è£
ããããã«ããã€ãã®ç°¡åãªãã¹ããè¡ããŸããããïŒ .
ã®ããã«å·Šçµåã§ã¯ãªãïŒå³çµåã§ããããã«?.
ãæ¬åœã«å¿
èŠãªãããããŸããããŸããã§ãã.
ïŒããã§ãªããšããšããã¿ãŒãäžå¿
èŠã«è€éã«ãªããŸãã
ãããåæ ããBrendenEichã«ããã³ã¡ã³ããããã«ãããŸãã
ç¹å¥ãªå ŽåãšããŠPropertyAccessExpressionã®äžã«ãããå®è£ ããããã«ããã€ãã®ç°¡åãªãã¹ããè¡ããŸããããæ¬åœã«å¿ èŠãªããããŸããããŸããã§ãããïŒ ïŒã®ããã«å·Šçµåã§ã¯ãªãïŒå³çµåã§ããå¿ èŠããããŸããããããªããšããšããã¿ãäžå¿ èŠã«è€éã«ãªããŸãã
@basarat詳ããæããŠããã ããŸããïŒ å³çµåãšå·Šçµåã®éãã®äŸ?.
ã¯ãç§ã«ãšã£ãŠéåžžã«åœ¹ç«ã¡ãŸãã
@zlumer
å³çµåãšå·Šçµåã®éãã®äŸïŒ ç§ã«ãšã£ãŠéåžžã«åœ¹ã«ç«ã¡ãŸãã
.
ã¯çµåæ§ã®ãŸãŸãªã®ã§ãåŒfoo?.bar?.baz
ã¯ASTã«ãªããŸãïŒ ?.
ãåãããã«æ±ãå ŽåïŒïŒ
// foo.bar.baz = PropertyAccessExpression
// .expr foo.bar = PropertyAccessExpression
// .expr foo = Identifier
// .name bar = Identifier
// .name baz = Identifier
å¿ èŠãªJavaScriptã®æŸåºã¯
foo != null ? (ref_1 = foo.bar) != null ? ref_1.baz() : void 0 : void 0;
ASTã«æ¬¡ã®ãããªãã®ãããå Žåããã®æŸåºãè¡ãã®ã¯ïŒç¹ã«_ååž°çã«_ïŒç°¡åã§ãã
// foo.bar.baz = PropertySafeAccessExpression
// .name foo = Identifier
// .expr bar.baz = PropertySafeAccessExpression
// .expr bar = Identifier
// .name baz = Identifier
_æåã®ASTãJavaScriptã«å€æããæ¹æ³_ãèããŠã¿ãŠãã ãããè€éããããæ確ã«ãªããŸãã ããã圹ç«ã€ããšãé¡ã£ãŠããŸãïŒroseïŒ
@ zlumer ã @ basaratãèšã£ãããšã«è¿œå ããããã«ãäŸ1 + 2 + 3
ãåºããŸãã
解æãããšãããããã®æäœã®ã©ããæåã«è¡ããããã決å®ããå¿ èŠããããŸãã
+
ãå·Šçµåã§ããå Žåãããã¯((1 + 2) + 3)
ãšããŠè§£éãããŸãã
+
ãå³çµåã§ããå Žåãããã¯(1 + (2 + 3))
ãšããŠè§£éãããŸãã
ãããå®éã«éããçããã©ããçåã«æããããããŸããã JavaScriptã§ã¯ãããªãã§ãããïŒ "hello" + 2 + 3
ã®äŸãèããŠã¿ãŸãããã
(("hello" + 2) + 3) => ("hello2" + 3) => "hello23"
("hello" + (2 + 3)) => ("hello" + 5) => "hello5"
ïŒèšé²ã®ããã«ãJavaScript / TypeScriptã¯+
æŒç®åã«å·Šçµåæ§ã䜿çšããŸããïŒ
@ basarat ã @ BrendanEichãèšã£ãããšã®ç§ã®ç解ïŒãããŠç§ãééã£ãŠããã°åœŒã¯ç§ãèšæ£ããããšãã§ããŸã-pingãç³ãèš³ãããŸããïŒïŒã¯?.
ãæ£ããé£æ³ã§ãããšããããšã§ã¯ãããŸããããCoffeeScriptã®ç¹æ®ãªã±ãŒã¹ã®ããããã£ã¯ã«ã¢ã¯ã»ã¹ããŸã?.
ãå³é£æ³ã§ããæš©å©ã ããšãã°ã解æããŸã
o.p?.q.r.s
ãªã®ã§
((o . p) ?. (q . (r . s))) # or something close to this
ãã以å€ã®
((((o . p) ?. q) . r) . s)
æŸåºããããããã§ãã
ç§ãã¡ã®ASTã¯ãé©åãªã»ãã³ãã£ãã¯åæã«é©ããŠããå¿ èŠãããããããã®ããŒãºã«åãããŠãæŸåºæé ãå°ãè€éã«ããããšãã§ããŸãã
@ basarat @ DanielRosenwasser説æããããšãããããŸãã ä»ã®ãšããç§ã¯ãããç解ããŠããŸãããç§ã¯ãŸã äžã€ã®ããšã«ã€ããŠç¢ºä¿¡ããããŸããã
å·Šçµå?.
ã¯éåžžã«æçœã§ãããäºæ³ãããŸãã
foo?.bar?.baz
ãªãïŒçŽïŒïŒ
var ref = ((ref = foo) == null) ? null : ((ref = ref.bar) == null) ? null : ref.baz;
ããããå³çµå?.
ãã©ã®ããã«æ©èœãããã¯ãŸã£ããããããŸããã äŸãæããŠããã ããŸããïŒ
ããããç§ã¯ãå³é£æ³ãã©ã®ããã«ãªãã®ãããŸã£ããç解ããŠããŸããã ä»äºã äŸãæããŠããã ããŸãã
@zlumerå®è¡æã®åäœã¯çµåæ§ã®ãŸãŸã«ãªããŸãã DanielRosenwasserãæããã«ããããã«ãç§ã¯ASTã«ã€ããŠè©±ããŠããŸããïŒ is not that ?. is right-associative, but that CoffeeScript special cases property accesses on the right of the ?. to be right-associative
ã
ç§ãã¡ã®ASTã¯ãé©åãªã»ãã³ãã£ãã¯åæã«é©ããŠããå¿ èŠãããããããã®ããŒãºã«åãããŠãæŸåºæé ãå°ãè€éã«ããããšãã§ããŸãã
@DanielRosenwasserãã£ãŒãããã¯ãããããšãïŒroseïŒ
@basaratããããšããçªç¶ãã¹ãŠãæããã«ãªããŸããïŒsmileyïŒ
@basaratã®2æã®ã³ã¡ã³ããšåæ§ã«ãç§ã¯.... _sigh .. ..
ãã ããèããŠã¿ããšããã®ãŠãŒã¹ã±ãŒã¹ã®99ïŒ
ã¯ããªããžã§ã¯ããžã®nullãã€ã³ã¿ãŒããã§ãã¯ããããšã§ãã ççŽã«èšã£ãŠã x
ãnumber
$ã®å Žåã誰ãx?.b?.c
$ãå®è¡ããŸããïŒ ãªããžã§ã¯ãã«ã€ããŠè©±ããŠããªããšãã®_long_ãã§ãŒã³ã®å®éã®ãŠãŒã¹ã±ãŒã¹ã¯å€ããããŸããïŒ string
ãé€ããŠïŒã ã·ã§ãŒããã§ãŒã³ã®å Žåã x && x.b
ãŸãã¯x === 0 ? null : x.b
ã§ç掻ã§ãããšæããŸãã
ã§ã¯ã ?.
ã¯ãªããžã§ã¯ãã¿ã€ãã§ã®ã¿æ©èœãããšèšãããšãã§ããŸããïŒ ãã®ä»ã®ã¿ã€ãã¯æ§æãšã©ãŒãã¹ããŒããŸãã ãŸãããã§ãŒã³å
ã§ã®é¢æ°åŒã³åºããçŠæ¢ããŸãã
次ã«ããã¹ãŠãa && a.b && a.b.c
ã«è»¢èšãããŸãã
@schungxãã§ãŒã³ã®ã¡ã³ããŒããä»»æã®ãã¿ã€ãã®å Žåã¯ã©ããªããŸããïŒ å®å šã«çŠæ¢ããŸããïŒ ãããšãããããééãããŠãæé«ã®ãã®ãæåŸ ããŸããïŒ
ããŠãç§ã®ææ¡ïŒ å®å šã«çŠæ¢ããŸãã å°çã®ããã«ãšã¬ã¬ã³ãã§ã¯ãªããç§ã¯ç¥ã£ãŠãã... :-)
ããããç§ã®çè«çæ ¹æ ïŒ
any
ã䜿çšããŠããå Žåã¯ãéèšã䜿çšããŠãã ãããany
ãæã£ãŠããªãã§ãããïŒany
ã¯æ¬åœã«æ³šæããŠæ±ãå¿
èŠããããŸãã any
ã®ãããªæè»ãªã¿ã€ãã§ãã®ãããªã·ã§ãŒããã³ãã®äœ¿çšãèš±å¯ããããšã¯ãå®éã«ãã°ãçºçããããšãæ±ããŠããŸãã ç§ã®æèŠã§ã¯ã any
ã¯å¯èœãªéãå¶éããå¿
èŠããããŸãã ããã¯Cã®(void *)
ã®ãããªãã®ã§ã-ããªããæ žå
µåšãææž¡ããããšããäºå®ã¯ãããªããã§ãããšããçç±ã ãã§ãããèªçºããªããã°ãªããªããšããæå³ã§ã¯ãããŸããïŒããã¯çŽ æŽããããªãã¬ãŒã¿ãŒã§ãããïŒ ç¹ã«ES6
/ ES7
/ TypeScript
ã®å Žå
var error = a.b.c.d; //this would fail with error if a, b or c are null or undefined.
var current = a && a.b && a.b.c && a.b.c.d; // the current messy way to handle this
var currentBrackets = a && a['b'] && a['b']['c'] && a['b']['c']['d']; //the current messy way to handle this
var typeScript = a?.b?.c?.d; // The typescript way of handling the above mess with no errors
var typeScriptBrackets = a?['b']?['c']?['d']; //The typescript of handling the above mess with no errors
ããããç§ã¯ãã£ãšæ確ãªãã®ãææ¡ããŸã-æ··ä¹±ããªãããã«ïŒ ããïŒ bïŒaïŒ.bã¹ããŒãã¡ã³ããå«ãcã¹ããŒãã¡ã³ãïŒ
var doubleDots = a..b..c..d; //this would be ideal to understand that you assume that if any of a, b, c is null or undefined the result will be null or undefined.
var doubleDotsWithBrackets = a..['b']..['c']..['d'];
è§ãã£ãè¡šèšã«ã€ããŠã¯ãè§ãã£ã以å€ã䜿çšãããšä»ã®ç¹ãšäžèŽããããã1ã€ã§ã¯ãªã2ã€ã®ç¹ããå§ãããŸãã ãããã£ãŠãããããã£åã®ã¿ãæ¬åŒ§ãä»ããŠéçãŸãã¯åçã«ãªããŸãã
2ã€ã®ãããã¯ããã®nullãŸãã¯æªå®çŸ©ãããã«åŠçãåæ¢ããåŒã®çµæãnullãŸãã¯æªå®çŸ©ã§ãããšæ³å®ããããšãæå³ããŸãã ïŒdã¯nullãŸãã¯æªå®çŸ©ã«ãªãããïŒã
2ã€ã®ãããã«ãããäœãèµ·ãã£ãŠããã®ããç解ã§ããããã«ãããæ確ã§ãããèŠããããããã¹ããŒã¹çã«ãªããŸãã
ãããæ°åãå°ç¡ãã«ããããšã¯ãããŸãã-åãå Žåã§ã¯ãªãã®ã§ãäŸãã°
1..toString(); // works returning '1'
var x = {};
x.1 = {y: 'test' }; //fails currently
x[1] = {y: 'test' }; //works currently
var current = x[1].y; //works
var missing= x[2].y; //throws exception
var assume= x && x[2] && x[2].y; // works but very messy
çªå·2ã®ãªãã·ã§ã³ã«ã€ããŠïŒã©ã¡ããæ¡çšã§ããããšããããªãã®é»è©±ã§ãããæ¢åã®ã«ãŒã«ãšã®äºææ§ã®ããã«æåã®ãã®ããå§ãããŸãïŒ
x.1.y
== runtime error
ïŒvar err = x..1..y; // should fail as well, since 1 is not a good property name, nor a number to call a method, since it's after x object.
Number.prototype
ããããããã£ãåŒã³åºãçªå·ã§ã¯ãªãããšãç解ããŠãããããæ©èœããã¯ãã§ãvar err = x..1..y; // should work as well, resulting 'test' in this case
var err = x..2..y; // should work as well, resulting undefined in this case
åçãªååã®å ŽåïŒ
var correct1 = x..[1]..y; //would work returning 'test'
var correct2 = x..[2]..y; //would work returning undefined;
çããã¯ã©ãæããŸããïŒ
PS foo?.bar
ããã³foo?['bar']
æ§æãæ©èœããŸãã
ãã ããçŸåšã®?
:
æŒç®åãš?.
ã®äž¡æ¹ã䜿çšãããšãåãè¡ã§éåžžã«æ··ä¹±ããå¯èœæ§ããããŸãã
äŸïŒ ?.
ãš?['prop']
ã䜿çšãã
var a = { x: { y: 1 } };
var b = condition ? a?.x.?y : a?.y?.z;
var c = condition ? a?['x']?['y'] : a?['y']?['z'];
ããã«ããã..
ãš..['prop']
ãšã¯å¯Ÿç
§çã«
var a = { x: { y: 1 } };
var b = condition ? a..x..y : a..y..z;
var c = condition ? a..['x']..['y'] : a..['y']..['z'];
ãšãŠãèå³æ·±ãã ïŒ+1ïŒ
ç§èŠã2ã€ã®ãããã¯ãã£ãšæ··ä¹±ããŸãã 2ã€ã®ããããç¯å²ãè¡šãèšèªïŒäŸïŒ 1..4
ïŒããããTypeScriptã¯å°æ¥ãã®æ©èœãè¿œå ããå¯èœæ§ããããŸãã
çå笊ã«ã¯ãäžç¢ºå®æ§ãŸãã¯æ¡ä»¶ä»ãã®æå³çãªæå³ãããã2ã€ã®ãããã¯åãæå³ãäŒããŸããã
@schungxååã«å
¬å¹³ã§ããã次ã®ãããªå¥åŠãªå¯èœæ§ã«åœ¹ç«ã¡ãŸãïŒ a?['b']
ãŸãã¯ãã®a?()
ã
+1 ?
a?['b']
ãša?()
ã¯ãcoffeescriptã§ããŸãåäœããç§ã«ã¯äŒŒåããŸãã
ããããç¹°ãè¿ãã«ãªããŸãããç§ã¯ã³ãŒããŒã¹ã¯ãªãããç²ç®ã«ããŠããã ããããããŸããã
+1 Rubyã¯ãå®åæŒç®åhttps://twitter.com/mikepack_/status/657229703443451904ãå®è£ ããŸããã Typescriptã¯ãç¹å®ã®æ§æã«é¢ä¿ãªãããããå¿ èŠãšããŸãã
ããã«ãããã³ãŒããããã¯ãªãŒã³ã«ãªããŸãð
+1ãããå¿ èŠã§ãïŒ
ãããããé¡ãããŸãïŒ CïŒã®ããã«æŒç®å
+1ç§ã¯é·ãéãããèŠéããŠããŸãã
+1
æžãã®ããšãŠãéãïŒsomeVariable && someVariable.someMember
ããªããæžãããšãã§ãããšãïŒsomeVariableïŒ.someMember
+1ãããã¯çŽ æŽãããã§ããã....ïŒç§ã«ãšã£ãŠæã欲ããã£ãæ©èœïŒ
+1ãããã¯è¯ãèãã§ãïŒ
ãã ããªããžã§ã¯ããè€éãªå ŽåãåŒã¯ïŒã§ãã£ã±ãã«ãªããŸãã åããããã£ïŒvar result = myValueïŒ.aïŒ.bïŒ.cïŒ.dïŒ.e;ïŒã®åŸãæåŸã®ããããã£ïŒvar result =ïŒmyValue.abcde;ïŒã®å€ãåãåãå¿
èŠãããå Žåã
+ 1-ããã¯ééããªãCoffeeScriptã®æ倧ã®æ©èœã®1ã€ã§ãããã³ãŒãã®å€ããCSããTSã«å€æããåŸãç§ã®ããŒã ã§æãæãŸããTypeScriptæ©èœã§ãã
+1ãã ããããã¯è€éãããŸãã
var x = { y: { z: null, q: undefined } };
var z: x|y|z = x?.y?.z;
ç§ã¯ããã奜ãïŒ
var x = { y: { z: null, q: undefined } };
var z: z|void = x?.y?.z;
x?.y?.z
ã®ã¿ã€ãã¯ãåžžã«z
ãã£ãŒã«ãã®ã¿ã€ãã§ãã ãã¡ãããåã¯nullå¯èœã§ããå¿
èŠããããå®éã®å€ã¯nullã§ããå¯èœæ§ããããŸãã null以å€ã®å Žåã¯ã z
ãã£ãŒã«ãã®ã¿ã€ãã§ããå¿
èŠããããŸãã
+1ããã¯ã倧èŠæš¡ã§è€éãªJSãããžã§ã¯ãã®éçºã容æã«ãããšããTypescriptã®ããžã§ã³ãšããŸã調åããŸãã
ããã«é¢ããæŽæ°ã¯ãããŸããïŒ ããã¯ããã®æ©èœãæ€èšããããã«ã³ãã¥ããã£ãæ祚ããå Žåã§ããïŒ ãŸãã¯ãæ€èšãããŸãããããšã³ãžãã¢ãªã³ã°äžã®èª²é¡ãããã€ããããŸããïŒ
ECMAScriptå§å¡äŒããã®äœããã®ææ¡ããªããã°ãæ°ããåŒã¬ãã«ã®æ§æãå°å ¥ããããšã¯å±éºã§ããããããããŸã§ã®ãšããæŽæ°ã¯ãããŸããã
https://github.com/Microsoft/TypeScript/issues/16#issuecomment-57645069ãåç §ããŠãã ããã
ãããå®åçæŒç®åã«é¢ããããæè¿ã®è°è«ã§ãïŒããããã®èãããããŸãããå€ãã®è¡åã®ããã«ã¯èŠããŸããïŒïŒ
ESã«ã+1ããä»ããã«ã¯ãã©ãã«ã+1ããšæžãå¿ èŠããããŸããïŒ
@msklvsk ESDiscuss
ä»ã®ãšãããããéããŸãã åŒã¬ãã«ã§ãããå¿ èŠãšããTypeScriptåºæã®ãã®ã¯å®éã«ã¯ãªãããããã®çš®ã®å€§ããªæŒç®åã®å€æŽã¯ãããã§ã¯ãªãESä»æ§å§å¡äŒã§è¡ãå¿ èŠããããŸãã
ãããåè©äŸ¡ããããã®äžè¬çãªããªããã¯ã€ã€ãŒã¯ã次ã®æ®µéã«å°éããå ·äœçãªESææ¡ããŸãã¯ãã®æ©èœãé·æéçºçããªããšããESå§å¡äŒããã®äžè¬çãªã³ã³ã»ã³ãµã¹ã§ãïŒããã«ãããç¬èªã®ã»ãã³ãã£ã¯ã¹ãå®çŸ©ããåççã«ããããšãã§ããŸãïŒåœŒãããåã€ãããšã確èªããŠãã ããïŒã
人çã¯ææª
ã¹ã¿ã³ãã¢ãã³ã®åé€ïŒ+1ïŒsã GitHubãªã¢ã¯ã·ã§ã³æ©èœã䜿çšããããæå¯ãã®TC39æ åœè ã«è±ããã£ã³ãã£ãŒãéã£ãŠãã ããã
ç§ãcoffeescriptãšSwiftã§ããã«æ £ããããåŸæ»ãã¯ã§ããŸããã TSã¯çŸåšã®ãšãããç§ã«ã¯æ»ãã§ããŸãã
@algestenèšèªèªäœãèæ
®ãããšã swift
ã«ã€ããŠã¯åæã§ããŸãããé·æçãªcoffescript
ã®ãµããŒãã«ã€ããŠã¯ããããŸããïŒæ¬çªãããžã§ã¯ãã§ã¯CoffeScriptã䜿çšããŠããŸãïŒã 2016幎6æã®èšèªåæã®ãã¬ã³ãã«ã€ããŠã¯ããã®ããã«ç¢ºèªããããšã«åæãããããããŸãããããã§ã¯ãæè¿coffescript
ãã©ããªã£ãŠããã®ããæ確ã«ç¢ºèªã§ããŸããã TypeScript
ã¯éå»æ°å¹Žéã§æãæ¥éã«æé·ããŠããŸãã
TypeScriptïŒGoãŸãã¯Swift以å€ã§ãç§ãã¡ãè¿å¹ŽèŠ³å¯ããæãæ¥éã«æé·ããŠããèšèªã¯TypeScriptã§ãã ãã€ã¯ããœãããæ¯æŽããJavaScriptã¹ãŒããŒã»ãããšAngular2ãã¡ãŠã³ããŒã·ã§ã³ã¯ã2ååæé£ç¶ã§å€§å¹ ãªé²æ©ãéããïŒ31ããïŒ26ã«è·³ãäžãããŸããã ããã¯ãããã30èšèªã®äžã§æ倧ã®åäžã®å€æŽã§ãããå šäœã§2çªç®ã«å€§ããªãžã£ã³ãã§ããïŒStandard MLã7ã¹ãããïŒã å®éãïŒ26ã§ã¯ãTypeScriptã¯Erlangãšçµã³ã€ããŠãããPowershellã®åŸãã«1ã€ãCoffeeScriptã®åŸãã«4ã€ãããããã20ã®ããå€ã«ãããŸããèšèªãçŽé¢ããŠããåé¡ã¯ãæé·ã§ãããã©ããã§ã¯ãªããå¢ãããããã©ããã§ãã次ã®2ã3ååæã§ããã20ã«ã©ã³ã¯ã€ã³ãããã®éçšã§CoffeeScriptãLuaãªã©ãé£èºãããŸãã
2014幎ãŸã§ã coffescript
ã®åŸåã¯ãããã§èŠãããšãã§ããããã«ããžãã£ã以äžã§ãããããã¯ãè¡°éãå§ãŸã£ããšãã§ãã
æ°ããtypescript2.0ã®å³å¯ãªnullïŒæªå®çŸ©ïŒãã§ãã¯ã§ã¯ãé¢æ°ãã§ãŒã³ã䜿çšã§ããªããããããã¯å¿ é ã§ãã
ããã¯ãECMAScriptã®æ¬¡ã®ããŒãžã§ã³ã«å«ãŸããŠããã¯ãã§ãã ãããTypeScriptãããããã©JavaScriptã§ããã«åœ¹ç«ã€ããšãèãããšãå®è£ ãçå®ã®ãã§ãã¯ã§ã¯ãªããæªå®çŸ©ãŸãã¯nullã®ãã§ãã¯ã«ãªãããšãèãããšãTC39ãè¿œå ããã®ã¯ç°¡åãªã¯ãã§ãã
åçŽãªå®è£ ãšJavaScriptã§æ £çšçãªå®è£ ã¯ãnullãŸãã¯undefinedã®ããããã«ééãããšãã«ç絡ããundefinedãè¿ãããšã§ãã
@bterlsonããã¯æå³ããããŸããïŒ ãã®ãããªææ¡ãåãå ¥ãããã確çã¯ã©ã®ãããã§ããïŒ
typescriptã®å€§ããªå©ç¹ã®1ã€ã¯ããæªæ¥ã¯ä»æ¥ããªãã«äžããããããšããããšã§ãã ããã¯ç§ãé©ããæ©èœã®1ã€ã§ããããŸã ããã«ã¯ãããŸããã
é¢æ°ãã§ãŒã³ãäžè¬çãªã€ãã£ãªã ã§ãããå³å¯ãªnullãã§ãã¯ãè¡ãããªããªã£ãããããã«è¿œå ãããããšãé¡ã£ãŠããŸãã æŒç®åãè¿œå ãããŸããã
TS 2ã®ãã°ãããnullãã§ãã¯ã«ãããå¿ èŠãªãã®ãå¿ èŠã«ãªããŸããã
ãã®ã¹ã¬ãããèªãã§ããããã¡ã³ãããããã£ãšæ³šç®ãããŠããªãããšã«ã¡ãã£ãšé©ããŠããŸãã
çæ³çãªäžçã§ã¯ãTypeScriptã¯ESã®éãå å°ããã¹ãã§ãããéã§ã¯ãããŸããã çé¢ç®ãªè©±ã§ãããTSããŒã ãESxãæ©èœãæ§æãææ¡ããŠå®æãããã®ãåžžã«åŸ ã£ãŠãããšããããTypeScriptã¯ã©ãã«ããã®ã§ããããã
ä»ã®äººãææããŠããããã«ããã®æ§æã¯å®éã«ã¯ãå¿ é ãã§ãã ãããŸã§ã®ãšããããã®ã¹ã¬ããã§ããã€ãã®è¯ãææ¡ãåãåã£ãŠããŸãã å®è£ ã¯ãããã®æåŸ ã«äžèŽããã¯ãã ãšæããŸãã
a?.b
ã¯ã a.b
ãæå¹ã§ããå Žåã«ã®ã¿ãã³ã³ãã€ã«æã«æå¹ã§ããå¿
èŠããããŸããnull
ãŸãã¯undefined
ã®å€ãæã€åŒã®éäžã«éããå Žåããã®å€ãæ»ãå€ã«ãªããŸããESããããæå®ãããšãã«äžäžèŽã«ã€ãªããå¯èœæ§ã®ããéšåã¯äœã ãšæããŸããïŒ
a?.b
ã®å Žåãæ¢åã®ïŒãããŠå°æ¥ã®ïŒïŒæ§æãšã®ç«¶åã¯èŠãããŸããã ããŒãµãŒãããŒã¯ã³?.
ãèŠã€ããå Žåãããããå®å
šãªããã²ãŒã·ã§ã³æŒç®åããšããŠæ±ãããšãã§ããŸãïŒ@cervengocã§èª¬æãããŠããããã«æåŸ
ãããŸãïŒã
æ§æã®ç«¶åã¯ã a?(b)
ãša?[b]
ãèš±å¯ããå Žåã«ã®ã¿çºçããŸããããã¯ããããã3é
ã®?:
æŒç®ååŒã®éå§ãšããŠã解éãããå¯èœæ§ãããããã§ãã ããããåå¿è
ã«ãšã£ãŠã¯ããããã¯èã«çœ®ããŠããããšãã§ãã a?.b
æ§æã ãããµããŒãããããšã§ããã§ã«å€ãã®éçºè
ãæºè¶³ãããããšãã§ãããšæããŸãã
çæ³çãªäžçã§ã¯ãTypeScriptã¯ESã®éãå å°ããã¹ãã§ãããéã§ã¯ãããŸããã
åŒã¬ãã«ã®æ§æã«é¢ããŠã¯ããŸã£ããåæããŸããã ããçç±ã§æšæºãæšé²ããå§å¡äŒããããŸãã1人ã®ãã¬ãŒã€ãŒã«ãã1åéãã®ã¢ã¯ã·ã§ã³ãJavaScriptã®å°æ¥ãäžæ¹çã«æ±ºå®ã§ããããã«ããããã§ã¯ãããŸããã
ä»ã®äººãææããŠããããã«ããã®æ§æã¯å®éã«ã¯ãå¿ é ãã§ãã
ãããTypeScriptã®å¿ éåã§ããå ŽåãJavaScriptã®å¿ éåã§ããããŸãã ç¹°ãè¿ãã«ãªããŸãããECMAScriptå§å¡äŒã«æžå¿µãæã£ãŠãã ããã
ESããããæå®ãããšãã«äžäžèŽã«ã€ãªããå¯èœæ§ã®ããéšåã¯äœã ãšæããŸããïŒ
å°ãªããšãããããã®å€ã«ééãããšãã«æ§æãnull
ãŸãã¯undefined
ã«ç絡ããããåžžã«undefined
ã«ç絡ãããã«ã€ããŠã¯æèŠã®çžéããããšæããŸãã ãŸãããã圢åŒã®æ¬åŒ§ã§å²ãŸããæ§æããµããŒããããŠãããã©ããã«ã€ããŠããããã€ãã®è«äºããããŸãã a?.b.c
ã®æ¯ãèããäœã§ããããšããåé¡ããããŸãã ?.
vs .?
vs a.b?
ã®è³ªåããããŸãã ãããdelete
æŒç®åã«ã©ã®ãããªåœ±é¿ãäžããããšããåé¡ããããŸãã
ããã«é¢ããESDIscussã¹ã¬ããã¯ã100ã³ã¡ã³ããè¶ ããé·ãã§ãã ãããŸããã®æ¬ åŠã¯ãããŸããïŒ 1ã€ã®äŸãåç¬ã§èŠãŠãã³ãŒããŒã±ãŒã¹ãããããããã¯ãããªããšèããã®ã¯ç°¡åã§ãã ãããã ããããTC39ã§ãŸã 誰ããããæ¯æããŠããªãçç±ã§ãããåäœã®ä»æ¹ã«ã€ããŠå€ãã®ãããŸãããããæ©èœãæ¥ãã§è¿œå ããªãçç±ã§ããããŸãã
ç³ãèš³ãããŸããããèšåãããã¹ã¬ãããèªãã§ããŸããã§ããããã£ãšèŠãããã«ééããªããããèŠãŠãããŸãã
ããã¯å°ãéã£ãèŠæ¹ãããŠããŸãã å§å¡äŒã«ã€ããŠãç§ã®æ£çŽãªæèŠã§ã¯ããããJavaScriptã決ããŠ_è¯ã_ã§ã¯ãªãæ倧ã®çç±ã®1ã€ã§ãã ã»ãã®äžäŸãšããŠãç§ãèŠãäžã§æãæåãããœãããŠã§ã¢ã®å€ãïŒTotal CommanderãIrfanViewãªã©ïŒã¯ã*å§å¡äŒã§ã¯ãªã1人ã®æ åœè ã«ãã£ãŠä¿å®ããã³èšèšãããŠãããããæåããŠããŸãããã¡ãããããã¯å®å šã§ã¯ãããŸãããæ£ããäŸã§ãããããšãã°ãããªãã ããå®å šãªES6ãèšèšãããšããããäžçã¯ä»ããè¯ãå Žæã«ãªããšã»ãŒç¢ºä¿¡ããŠããŸãã
ãŸããããªããèšåãããããŸããã¯ã99ïŒ
ã®ãçè«çããªãã®ã§ãããéçºè
åŽããã¯ç¡é¢ä¿ã§ãã null
ãŸãã¯undefined
$ã®ã©ã¡ããè¿ããããã誰ãæ°ã«ããŸããïŒ 1ã€éžã¶ã ãã§ããã®ããã«äœ¿çšããŸãã
å šäœãšããŠãããªããšãã®å§å¡äŒã¯ç§ãã¡ã®ã»ãšãã©ãšã¯ç°ãªãåŽã«ããããã®åŽããã®ãã®ã¯éåžžãå®éãããè€éã§ãã ãããŠãããã¯æ§ããã«èšã£ãŠããããããã®éçç£æ§ã«ã€ãªããå¯èœæ§ããããŸãã å人çã«ã¯åãåããªãã§ãã ãããããããäžè¬çãªç§ã®çµéšã«ããã°ãäŒè°å®€ããé »ç¹ã«åºãŠãã³ãŒããèŠãæ¹ããã人ãããŸãã
ãã¡ãããäžå¿«æã¯ãããŸãããå人çã«ã¯äœãåããªãã§ãã ãããç§ãå«ãå€ãã®éçºè ã®ã¯ã©ã€ã¢ã³ãåŽéçºã«é©åœããããããã®ã§ãç§ã¯ããªããšãã¹ãŠã®TSããŒã ã«å€§ããªæ¬æãè¡šããŸãããã¹ãŠã®äœæ¥ã«æè¬ããŸãã ç§ãã¡ãæšæž¬ãããã®ç¹å®ã®ãã®ã«å°ããã£ããããŠããŸãã
æåŸã«ãã1ã€èããŸããã ç§ã¯åè¿°ã®ESã¹ã¬ãããå®è¡ããŸãããã1ã€ç¢ºããªããšããããŸããããã¯ã圌ãããããè€éã«ããããŠãããšããããšã§ãã 圌ãã¯ããããã·ããªãªã«é©ãããã®ãèšèšããããšèããŠããŸãã
ç§ã¯å人çã«ãæ¡ä»¶ä»ãã¡ã³ããŒã¢ã¯ã»ã¹æŒç®åã«å®å šã«æºè¶³ããŠæºè¶³ããŠããŸãã æ¡ä»¶ä»ãåŒã³åºããæ¡ä»¶ä»ãã€ã³ããã¯ã¹çœ²åã¯å¿ èŠãããŸãããæå¹ãªJSã³ãŒãã§ãããã¹ãŠã®æŽŸæãªã·ããªãªããµããŒãããå¿ èŠã¯ãããŸããã ããã§å šéšã§ãã ãããã代ããã«ã圌ãã¯ããã«åº§ã£ãŠããã¹ãŠãäžåºŠã«è¡ãæ¹æ³ã«ã€ããŠè©±ãåãå¯èœæ§ããããŸããããã¯çŽ æŽãããèšç»ã§ãããçµå±ã®ãšããäœããããŸããã
å šäœãšããŠãããªããšãã®å§å¡äŒã¯ç§ãã¡ã®ã»ãšãã©ãšã¯ç°ãªãåŽã«ããããã®åŽããã®ãã®ã¯éåžžãå®éãããè€éã§ãã
ã©ã€ã¢ã³ãTC39ã®æ¬åœã®ã¹ããŒã¿ã¹ãæ£ç¢ºã«åæ ããŠãããšã¯æããŸããã RyanãšTypeScriptããŒã ã¯ãTypeScriptã®éåžžã«æ確ãªèšèšç®æšãèšå®ããŸããã åœåã®ããããŠä»ãªãéåžžã«çŸåšã®ç®æšã®1ã€ã¯ãTypeScriptãJavaScriptã®ã¹ãŒããŒã»ããã§ãããšããããšã§ãã 人ã ãæãã§ããèšèªã§ã¯ãããŸããïŒäŸïŒDartãHaxeïŒã æ§æã«é¢ããŠã¯ãTypeScriptããŒã ã¯ãæ§æãäºåã«çºæããã³ã¹ãïŒã¢ãžã¥ãŒã«ãªã©ïŒãèŠåŽããŠåŠã³ãŸããã ææ¡ãããESæ§æãTypeScriptã䜿çšããæ§æãšå®å šã«äºææ§ããªãå Žåãã¯ã©ã¹ã®ãã©ã€ããŒãã¡ã³ããŒãšã®èª²é¡ã«ãçã£åããåãããŸãã ãªãã§ïŒ èšèªã®å®è¡æã®èª²é¡ãèãããšãè¡šé¢äžã¯è€éã«èŠããªããããããªãããšãéæããããšã¯äžå¯èœã ããã§ãã
ç§ã®æèŠã§ã¯ãTC39ã¯JavaScriptããä¿åãããŠããŸãã ES4ã¯ãåªããé©æ°çãªã¢ã€ãã¢ãäžè¶³ããŠããããã§ã¯ãªããã€ã³ã¿ãŒããããç Žå£ããããã«æŸæ£ãããŸããã TC39ã¯åœ¢ã«ãªãã圌ãã¯åœŒãã®è°è«ãšåœŒããã©ã®ããã«æ±ºå®ãäžããES4ã«éåžžã«äŒŒãŠãããã€ã³ã¿ãŒããããå£ããªãã£ãES2015ãç§ãã¡ã«æäŸãããã«ã€ããŠå ±æããå®å šã«ãªãŒãã³ã«ãªããŸããã åºæ¬çã«ã10幎åã®ã³ãŒããåé¡ãªãå®è¡ããJavaScriptã©ã³ã¿ã€ã ããããŸãããèšèªã®å€ãã®éèŠãªæ¹åããµããŒãããŠããããšã¯é©ãã¹ãããšã§ãã ES2016ã¯åµã®åã®èœã¡çãã§ããã ES2017ã«ã¯ããåççãªãéã®æ©èœãšå€æŽããããæ£ããæ¹åã«åããæ確ãªç®¡çããã»ã¹ããããŸãã
ã§ããããç§ã®æèŠã§ã¯ãç©äºã®ãç°ãªãåŽãã«ããããšã¯æããã«ããŸããããŸããã ããã¯ããå¿ é ãæ©èœã®å©äŸ¿æ§ã«åããã®ã§ãã
@kitsonkç§ã¯ãå¥ã®åŽé¢ããåŠå®çã«æå³ããŠããŸããã§ãããç¹ã«ãTypeScriptãŸãã¯ES6ã«å ¥ããããäœæ¥ãäœäžãããã€ããã¯ãããŸããã§ããã ããã«ãTypeScript IMOã®æãåªããŠããç¹ã¯ãæ確ãªèšèšç®æšããããä»ã®å€ãã®ãªãŒãã³ãœãŒã¹ã®ãã®ãšåæ§ã«å€§æ··ä¹±ã«ãªãããšããååã«ä¿è·ãããŠããããšã§ãã
ãã®æ©èœã¯ã倩æçãªäººã ã®ã°ã«ãŒãããåçŽãªæ¹æ³ã§ã¯ãªããç©äºãèããããŠè€éã«ããåŒã³åºããã€ã³ããã¯ã¹çœ²åããµããŒãããªããªã©ã®å¶éãåãå ¥ãããšããæ確ãªäŸã§ããããšãäŒãããã£ãã ãã§ãã ããã®ãã©ãŒã©ã ã®èª°ãããå²ãåœãŠã§ãã®æ§æã䜿çšããããšãææ¡ããŸããããããã¯ã¡ãã£ãšã¯ã¬ã€ãžãŒã§ãã ãã®æå³ã§ã¯ããã®çŸè±¡ã¯éå¹æã ãšæããŸãã
ããšãã°ãå人ã®ã¡ã³ããŒãæçµçãªES6ã®æŠå¿µãšäºææ§ããªããªãã®ã¯ãããªãã®åŽã§ã¯èŠçã ãšç解ããŠããŸãã ãããäžæ¹ã§ãç§ãã¡ã¯ãããæã£ãŠããŸããã ES6ã®ãã£ãšåã ãããŠããããç§ãã¡ã®åŽããã®èŠç¹ã§ãã 倧ãŸãã«èšãã°ãé©åãªã³ãŒããã©ã®ããã«çºè¡ãããã¯æ°ã«ããããã åãã§äœ¿çšããŠããŸãã ã¢ãžã¥ãŒã«ãããã³ãã¹ãŠãšåãã§ãã ç§ãã¡ïŒãŸãã¯å°ãªããšãç§ïŒã¯ãããªããããã«ã€ããŠè©±ããŠãããããªèŠçãèŠãŠããŸããã§ãããç§ãã¡ã¯åžžã«ãã©ã€ããŒãã¡ã³ããŒãã¢ãžã¥ãŒã«ã«æºè¶³ããŠããŸããã
ãã®ç¹å®ã®æ©èœã¯ãç§ãèªãã CoffeScriptã«ãããŸãã ãªãç§ãã¡ãåçŽãªéçºè ã¯ããã©ãããã©ãŒã /ã©ã€ãã©ãª/ãã©ã°ã€ã³ãªã©ãéžæãããšãã«åžžã«åŠ¥åããªããã°ãªããªãã®ã§ããïŒ ç§ã¯ãã€ããšããæå³ã§ãã ããã¯ã¡ãã£ãšé¢åã§ãã ããã«ã¯ãä»ã®ãã¹ãŠã®åå è ïŒESãå«ãïŒïŒãå®å šã«çœ®ãå»ãã«ããã¯ã©ã€ã¢ã³ãåŽã®éçºã®å€§éšåã«é©åœãããããããã®ãã·ã³ãã«ãªãæ©èœïŒå°ãªããšãã¡ã³ããŒã¢ã¯ã»ã¹éšåãæå³ããŸãïŒãESãããã«ã³ããããããŸã§å®è£ ãããªããšèããŠããŸãã
ä»æ¥ã®TC39ããŒãã£ã³ã°ã§ããã®æ©èœãã¹ããŒãž0ããã¹ããŒãž1ã«ç§»è¡ããããšãç°¡åã«èª¬æããããšæããŸãã
é¢é£ããã³ãããïŒ https ïŒ//github.com/tc39/proposals/commit/cb447642290a55398d483f5b55fb7f973273c75d
äŒè°ã®è°é¡ïŒ https ïŒ//github.com/tc39/agendas/blob/master/2017/01.md
ããïŒ ããã¯å·šå€§ã§ãïŒ
https://github.com/claudepache/es-optional-chainingãžã®ãªã³ã¯ã䟡å€ããããŸã
ç§ãããã§èŠãããã€ãã®ãé©ããïŒç§ãåæããªããšèšã£ãŠããã®ã§ã¯ãªãã以åã«ãããè¡ã£ãŠãããšãããããããéã£ãããæ¹ã§è¡ã£ãã§ãããããšã ãã§ãïŒïŒ
null
ã¯a?.b
åŒããçæãããŸããïŒ a
ãnull
ã®å Žåã代ããã«undefined
ãçæãããŸãb
ããã³c
ããããã£ãundefined
ã®å Žåã$ a?.b.c.d
ã¯ã¹ããŒãããŸãããã©ã€ã¢ã³ã¯èªã¿åãããšãã§ããŸããb
ãå®çŸ©ãããŠããªãå Žåã$ (a?.b).c
ã§ããã¹ããŒãããŸãããã©ã€ã¢ã³ã¯èªã¿åãããšãã§ããŸããc
åŒã³åºããnull
ãè¿ãå Žåã$ a?.b.c().d
ã¯undefined
ãè¿ããŸããã©ã€ã¢ã³ã¯èªã¿åãããšãã§ããŸããdelete
æŒç®åããµããŒããããŠããŸãa?.[x]
ããµããŒããããŠããŸãfunc?.(...args)
ããµããŒããããŠããŸãïŒïŒïŒä»ããã¹ããŒãž2ãŸã§ã®éã«ãããã®åéã§å€åãèŠããããšæããŸãã
ç§ã¯coffeescriptããããæ£ããç解ãããšæããŸãã
bãæªå®çŸ©ã®å ŽåãaïŒ.bcãã¹ããŒãããŸãã
aïŒïŒïŒãšaïŒ[0]ã¯ã©ã¡ããè¯ãã§ãã
- é£éãããã§ã®äŒæïŒbããã³cããããã£ãå®çŸ©ãããŠããªãå ŽåãaïŒ.bcdã¯ã¹ããŒãããŸãã
- 芪ã®ååšäžã§ã®äŒæïŒbãå®çŸ©ãããŠããªãå Žåã§ãïŒaïŒ.bïŒ.cã¯ã¹ããŒãããŸãã
- ã¡ãœããåŒã³åºãã§ãäŒæãçºçããŸããcåŒã³åºããnullãè¿ãå ŽåãaïŒ.bcïŒïŒãdã¯undefinedãè¿ããŸãã
ãããã®ç¹ã¯ç§ã«ã¯æ£ç¢ºã§ã¯ãªãããã§ãã ææ¡ããïŒ
a?.b.c().d // undefined if a is null/undefined, a.b.c().d otherwise.
// NB: If a is not null/undefined, and a.b is nevertheless undefined,
// short-circuiting does *not* apply
ãããŒãç§ã¯ãããå®å šã«èªã¿éããŸããã ããªããæ£ããã æŽæ°
å ã®ææ¡ããã®@algesten ïŒ
a?.()
b?.[0]
çãã ãã®å ŽåãæŒç®åã¯?.
ã®ããã«ãªããŸãã
ããã§ããã€ãã®è¿œå ã®äŒè©±ãè¡ãããŠããŸãïŒ https ïŒ//github.com/estree/estree/issues/146
ããŸãé©çšã§ããåŒçšïŒÂ«åçŽãªããšãç°¡åã«ããé£ããããšãå¯èœã«ãã»ã ãããã£ãŠããããããæãäžè¬çãªã±ãŒã¹ãé©åã«ãµããŒãããè€éãª/ãŸããªã±ãŒã¹ãïŒå°ãªããšãæåã¯ïŒã¹ãããããªãããããé·ãïŒæ¢åã®ïŒæ§æã§ãæåã§å®è¡ãããããšãèš±å¯ããŸãã
ã¡ããã©ç§ã®2ã»ã³ã
let a = b?.c?.d?.e;
ã«ïŒ
let a;
try{
a = b.c.d.e;
}catch(e){
a = undefined;
}
@cedvdbã®ãŸã£ããç°ãªãã»ãã³ãã£ã¯ã¹-ã²ãã¿ãŒã§ã¹ããŒãããäŸå€ã¯åäœãåŒãèµ·ãããŠã¯ãªããŸãã
@RyanCavanaughãã..ç§ã¯ãããèãæããªãã£ãã
ããã¯çŸåšå®è£ ã®ã¬ãŒããŒã«ãããŸããããããšãTSããŒã ã¯ESææ¡ãããã«é²ãã®ãåŸ ã¡ãŸããïŒ
ããã¯ç§ãã¡ã®çããªã¹ãã«ãããŸãã ãŸã ããã€ãã®è³ªå/æžå¿µããããŸãããæ¥æã«ã¯ããã«é¢ããåããèŠãããã¯ãã§ãã
@mhegazyã®ã³ã¡ã³ããã©ãããæ¥ãã®ãããããªã-TC39ææ¡ã«é¢ããæªè§£æ±ºã®è³ªåã®æ°ãå€ãããŠãããã§æå³ã®ããäœæ¥ãè¡ãããšãã§ããŸããã å
·äœçã«ã¯ã null
ãšundefined
ãã©ã®ããã«çžäºäœçšããã©ã®æ§æãå®éã«ãµããŒããããŠãããã«é¢ãã質åã«æåã«å¯ŸåŠããå¿
èŠããããŸãã ã¹ããŒãž2ã¯æäœéã®ãã®ã§ãããå®è¡æã®åäœãžã®åœ±é¿ãèæ
®ãããšãã¹ããŒãž3ããå§ãããŸãã
ããã¯åã«ã³ãŒããæ©èœããŸããïŒ
a == undefined ? expression : undefined
expression
ã¯ãaxãa [x]ãaïŒxïŒã delete
ãããã§çæã§ããããšãæå³ããŸã
次ã«ã a?.b?.[c]?.(d)
ãçæãããŸã
a == undefined ? (a.b == undefined ? (a.b[c] == undefined ? a.b[c](d) : undefined) : undefined) : undefined
RyanCavanaughã®ãã¹ãŠã®ã«ãŒã«ãééããããã§ã
==
æŒç®åãå«ããªå Žåã¯ã a === undefined || a === null
ã®å¯èœæ§ããããŸã
@ zh99998 ''
ãš0
ãåçã§ããããã$ ==
ãå«ãå¿
èŠããããŸãã å®è¡æã®åäœã¯(typeof value === 'object' || typeof value === 'function' || typeof value === 'symbol') && value !== null
ã«å¯Ÿããããçš®ã®ãã§ãã¯ã§ããå¿
èŠããããšã»ãšãã©äž»åŒµãããŠããŸãããããã¯çŸåšããªãè€éã«ãªã£ãŠããŸãã
@RyanCavanaughãèšã£ãããã«ã TC39ããããŒã¶ã«ãå°ãªããšãã¹ããŒãž2ãŸãã¯3ã«é²ããŸã§ãé²è¡ããå¯èœæ§ã¯äœãã§ãã
==
ã¯null
ãšundefined
ã«çããã ãã§ã
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness
Chromeã³ã³ãœãŒã«ã§ãã¹ãã«åæ ŒããŸããïŒ
'' == undefined
false
0 == undefined
false
@kitsonk undefinedã¯ãnullã«åŒ·å¶å€æããã ãã§ããã®éãåæ§ã§ãã ä»ã®å€ãæªå®çŸ©ãŸãã¯nullã«åŒ·å¶ãããããšã¯ãããŸããã
ããªãã¯åœãã®äŸ¡å€èŠ³ãšæ··åãããŠããããã§ãã 0ãš ""ã¯ç¢ºãã«åœç©ã§ãããnullãæªå®çŸ©ã«åŒ·å¶ãããããšã¯ãããŸããã
==
匷å¶ãæå³ããŸãã null == 0
ã¯falseã§ããããã¯ãundefined以å€ã¯nullã匷å¶ã§ããªãããã§ãã undefined == 0
ã«ã€ããŠãåãããšãèšããŸãã
å¥ã®äŸã¯
if(!NaN) console.log("NaN is falsy") // NaN is falsy
if(false == NaN) console.log("NaN coerces to false")
else console.log("NaN doesn't coerce to false");// NaN doesn't coerce
ããªãã¯çµµãæã«å ¥ããŸãã
äžé æŒç®åã䜿çšããè©Šã¿ã¯ãããããããŸãããåãããããã£ãè€æ°ååç §ããå®è£ ã§ã¯ãäºæããªãå¯äœçšãçºçããå¯èœæ§ããããŸãã
幞ããJavaScriptã«ã¯IIFEããããããã¢ã¯ã»ãµãŒã®çµæãé¢æ°ãã©ã¡ãŒã¿ãŒã«æ ŒçŽããå¿
èŠãªã ãåç
§ããŠã2å以äžè©äŸ¡ããããšã¯ã§ããŸããã 以äžã®äŸã§ã¯ã ?.
æŒç®åãå«ãåŒã®ä»£ããã«ãè€æ°ååŒã³åºãããšãã§ããcoalesce
ã©ã ããäœæããŸãã
èšèªã®å®è£ è ãæ°ã«ããå¿ èŠãããããšã®1ã€ã¯ãåŒã®éäžã§ã®é åãšé¢æ°ã®åŒã³åºãã§ãã ã³ã³ãã€ã©ãŒã¯ãããã®ç¶æ³ã®æ€åºãåŠçãããããã®åŒãåäœåŒã³åºãã®æåŸã«è¿œå ããã ãã§ãããšæããŸãã
const coalesce = (x: any, y: string) => x == null ? null : x[y];
const x = {
y: {
z: "Hello, World!!!"
},
f: () => "Foo!",
a: ["Array!"]
};
// x?.y?.z
const value1 = coalesce(coalesce(x, 'y'), 'z');
// x?.f()
const value2 = coalesce(x, 'f')()
// x?.a[0]
const value3 = coalesce(x, 'a')[0]
ãcoalesceããšããååã®å®éã®ã°ããŒãã«ã¯å¿ èŠãªãããšã«æ³šæããŠãã ããã ãã®ã³ãŒãã¯ãä»»æã®åŒã«çŽæ¥ã€ã³ã©ã€ã³åã§ããŸãã ããããããã¯ããã«ååãä»ããèšæºæãæžãããããããŸããã
æŒç®åã«äœ¿çšãããæ§æããèšèªââã®å®è£ è ãæšæºãåŸ ã¡ãããã©ããã«ã€ããŠã¯ããŸãæ°ã«ããŸããã å¥ã®ã¢ãããŒããæ«é²ããããšæã£ãã ãã§ãã
ããã«ããã ??
æŒç®åãå¿
èŠã«ãªããŸãã CïŒã§ã¯ãããã«ããnull
åŒãå³åŽã«çœ®ãæããããŸãã
string x = null ?? "Hello";
````
In JavaScript, it is more idiomatic to use `||` to replace "falsey" values with the value on the right.
```javascript
var x = null || "Hello";
æ®å¿µãªãããçå®æ§ã¯ããŸãã«ãå€ãã®ãšããžã±ãŒã¹ïŒ 0
ã false
ãªã©ïŒããã£ããã£ããŸãã nullåäœïŒ ?.
ïŒæŒç®åã䜿çšããå Žåã¯ã null
nessã«åºæã®äœããå¿
èŠã«ãªããŸãã
const x = { y: "" };
const result1 = x?.y || "default"; // I'd expect "default"
const result2 = x?.y ?? "default"; // I'd expect ""
@ jehugaleahsa ãcolesceã䜿çšããäŸã§ã¯ãåã®ãã§ãã¯ãnullãè¿ããå Žåã«ãé¢æ°åŒã³åºããšã¡ã³ããŒã¢ã¯ã»ã¹ãçºçããªãããã«ããæ¹æ³ãå¿ èŠã«ãªããŸãã xïŒ.fïŒïŒã®äŸã§ã¯ãxãnullã®å Žåã¯fãåŒã³åºããªãã§ãã ããã
@bschlenkåæããªããšæããŸãã null is not a function
ã®ãããªã¡ãã»ãŒãžã§å€±æããã¯ãã ãšæããŸãããããã¯ç§æ¬¡ç¬¬ã§ã¯ãªããšæããŸãã
æŒç®åãå®è£
ããããã®å¯èœãªæ¹æ³ã詳述ããã³ã¡ã³ãã®æè¿ã®æ¥å¢ã¯å°ãå¥åŠã§ãã
å®è£
ã¯ãããã解決ãããåé¡ã§ãã
èå³ãããå Žåã¯ãidxã©ã€ãã©ãªããããŸããããã¯?.
æŒç®åã®åäœã«ãã䌌ãŠããŸãããèšç»ãããæŒç®åã®å€ãã®è©³çŽ°ãç¡èŠãããŸãã ãšã«ãããã³ã³ãã€ã«åºåã®ä»æ§ã¯ããã®ãããªãã®ãå®è£
ããæ¹æ³ã«ã€ããŠçåã«æã£ãŠãã人ã«ãšã£ãŠã¯èå³æ·±ããããããŸããã
TSã¯ãã®ãããªãã®ãåºåããããšãããŸã£ããç°ãªããã®ãåºåããããšãã§ããŸããããããç§ãã¡ãããã§åŸ ã£ãŠããããšã§ã¯ãªããšæããŸãã ããã§ã¯ãESææ¡ãããããã®æ¹åã«ç§»åãããŸã§ãTSã¯ãªãã¬ãŒã¿ãŒãååŸããªããšäœåºŠãèšãããŠããŸãã
ãããšããã«ãªã¹ããããŠããã®ã¯ããŸã ããã€ãã®æªç¥æ°ãæ®ã£ãŠããã»ãã³ãã£ã¯ã¹ã§ãã
ãããæ£ããå®è£
ãã ||
ãš? ... : ...
ãäœãããããç解ããããã«ãããã§ããã«100åã®ã³ã¡ã³ããããå¿
èŠã¯ãããŸããã®ã§ãå®å¿ãã ããã @noppaãææããããã«ãESä»æ§ãå®æããã®ãåŸ
ã£ãŠããŸãã
https://github.com/babel/babel/pull/5813ïŒbabylon PRã«ä»éïŒã¯ãBabelã®preset-stage-1
ã«ããŒãžãããŸããã ãã¡ãããä»æ§ã¯ãŸã ã¹ããŒãž1ã«ãããŸãããããã¯ãããåé²ãããã®ã«åœ¹ç«ã¡ãŸãã
ãã¶ãç§ã¯ééã£ãŠããŸããããã®ã¹ã¬ããã§tc39ææ¡ãžã®æçœãªãªã³ã¯ãèŠåœãããªãã£ãã®ã§ãããã¯å°æ¥ã®èªè ã®ããã®ãã®ã§ãïŒ https ïŒ//github.com/tc39/proposal-optional-chaining
åèãŸã§ã«ããªãã·ã§ã³ã®ãã§ãŒã³ã¯æ¥é±TC39ã§è¡ãããŸãhttps://github.com/tc39/agendas/blob/master/2017/07.md
@jehugaleahsaããªãã¯æ£ãããšæããŸããæ¥é±ãTC39ã§??
ãçºè¡šããŸãã ããã§ææ¡ã«åŸãããšãã§ããŸãïŒ https ïŒ//github.com/gisenberg/proposal-nullary-coalescing
ãªãã·ã§ã³ã®é£éãTC39ã§ã«ããŒãããŠããããã§ã...è©æ±ºã¯äœã§ãããïŒ
ããŸãããã°ãTypescriptã§ãããåé²ãããã®ã«ååã§ããð
@markwhitfeldã¡ã¢ã®èŠçŽããïŒ
ãªãã·ã§ã³ã®é£éæŒç®åïŒã¹ããŒãž1ã®ãŸãŸã§ãããŸããŸãªãªãã·ã§ã³ã®ããæ確ãªå®çŸ©ãšãã£ãŒãããã¯ãžã®åçãšãšãã«åŸã§æ»ã£ãŠããŸã
ããã«å®å šãªã¡ã¢ïŒ https ïŒ//github.com/rwaldron/tc39-notes/blob/master/es8/2017-07/jul-27.md#13iia -optional-chaining-operator
ãªãã¬ãŒã¿ãŒãã©ã®ããã«æ¯ãèãã¹ããã«ã€ããŠã¯ãŸã æªè§£æ±ºã®è³ªåãããã®ã§ãTypeScriptã«è¿œå ã§ããç¶æ ã«ã¯ãŸã ãªã£ãŠããªãããã§ãã
ãããã®ã¡ã¢ãããå§å¡äŒã¯æ瀺ããããªãã·ã§ã³ãã©ã®ããã«æ©èœããããç¥ããªãããã«èŠããŸããç§ã¯ã圌ããè°è«ããåã«ã圌ããè°è«ããããšãèšç»ããŠããææ¡ã«ã€ããŠåŠã¶ããã«åã£ããšæããŸããã å³å¯ãªnullãã§ãã¯ãæå¹ã«ã§ããããã«ãªããŸã§ãããå°ãæéãããããšæããŸãã
ç§ã¯åœŒãããªãã·ã§ã³2/4ïŒãšã«ããææ¡ã®çŸåšã®ç¶æ ã§ãïŒã§è¡ãããšã匷ãæãã§ããŸãã
2014幎7æ15æ¥-2017幎9æ4æ¥ããŸã äœããããŸãã
@frankfvbããªãã¯æããã«åé¡ãèªãã§ããŸããã
TypeScriptã®ãã®æ©èœã®æ©èœã«çŽæ¥åœ±é¿ãäžããECMAScriptã®ææ¡ãããã«é²å±ãããŸã§ããã®æç¹ã§å®è£ ããã®ã¯è³¢æã§ã¯ãªããšã³ã¢ããŒã ã«ä¿¡ããããå€ãã®è°è«ããããŸããã
ECMAScriptæšæºå§å¡äŒã®ååã®äŒè°ã®æç¹ã§ãææ¡ã¯ããããã©ã®ããã«å®è£ ããããã«ã€ããŠããã€ãã®éåžžã«åºæ¬çãªè³ªåããããããã¹ããŒãž1ã«ãšã©ãŸã£ãŠããŸãã å³æ Œãªã«ãŒã«ã§ã¯ãããŸããããTypeScriptã¯ã¹ããŒãž3ã®ææ¡ã®ã¿ãå®è£ ããŸãã ã¹ããŒãž2ã®ææ¡ãéåžžã«éèŠã§ãããTypeScriptã§äœ¿çšãããå¯èœæ§ããããšèããããå Žåã¯ãã¹ããŒãž2ã®ææ¡ãå®è£ ããããšããããŸãã
ç§ã¯ããã«ã€ããŠãã以äžæ確ãªäººã ãã©ãã»ã©æ確ã«ãªãããšãã§ãããããããŸããã
åã«èšã£ãããã«ãããã¯ç§ãã¡ã®çããªã¹ãã«ãããŸãã TC39ããæŒç®åã®ã»ãã³ãã£ã¯ã¹ã«ã€ããŠäœããã®ã³ã³ã»ã³ãµã¹ã«éããã®ãåŸ ã£ãŠããŸãã ç§ãã¡ã¯ãããæ¶ããŠãããŠãŒã¶ãŒãå£ãããšãå«ããŸãã
ææ¡ãæ€èšãããå Žåã¯ãé©åãªå Žæã§ã³ã¡ã³ãããŠãã ããã ç§ãæèŠããããŸããããã®ã¹ã¬ããã«ããããããŠãäœãèµ·ãããŸããã
ç§ã¯çŸåšã®ããŒãºãæºããã·ã³ãã«ãªãã®ãäœæããŸããã åãªã³ã¯ãããããã£åã§ãããã§ãŒã³ã§ã®ã¿æ©èœãããããé åå ã®èŠçŽ ãžã®ã¢ã¯ã»ã¹ïŒããšãã°ïŒã¯ãµããŒããããŠããŸããã
TypeScriptã§ã®éåžžã«åçŽãªãšã«ãã¹æŒç®åã®å®è£
ãŸããlodash / underscoreãããå Žåã¯ããã§ã«_.get(Book, 'author.name.firstName')
ã䜿çšã§ããŸããããã«ãããå¿
èŠãªåŠçãå®è¡ãããŸãã
ç·šéïŒ _.get()
ã¡ãœããã®ã¿ã€ãã®åé¡ã®ãããããã¯æããã«æªãã¢ããã€ã¹ã§ãã 以äžã®ã³ã¡ã³ããåç
§ããŠãã ãã
@tolgaek ã _.get
ã¯ã¿ã€ãã³ã°ãæªãã§ããããã®ããè¯ãã¿ã€ãã³ã°ïŒäœæè
ã®ããã«ãŸã ããŒãžãããŠããŸããïŒã§ããtypescriptã¯ããªããžã§ã¯ãã®æ·±ãã1ã®å Žåã«ã®ã¿ãçµæã®ã¿ã€ãã確å®ã«æšæž¬ã§ããŸãããã以å€ã®å Žåã¯ãã¹ãŠany
ã§ãã
äžæ¹ããšã«ãã¹æŒç®åã䜿çšãããšãtypescriptã¯ä»»æã®æ·±ãã®ãªããžã§ã¯ãã®çµæã®ã¿ã€ããæšæž¬ã§ããå¯èœæ§ããããŸããããããImããšã«ãã¹æŒç®åã楜ãã¿ã«ããŠããçç±ã§ãã
ãªãã»ã©ãã¿ã€ãã³ã°ã®åé¡ããããšã¯ç¥ããŸããã§ããã ããããšã@BjornMelgaard
@mhegazyãã®æ©èœãæåã«å®è£ ããŠãå®éšçãªæ©èœãšããŠããŒã¯ããããšã¯ã§ããŸãããïŒ å®éšçãªæ©èœã«ä»æ§ãå€æŽãããŠããã°ãåé¡ã¯ãªãã¯ãã ãšæããŸãã
ãšã«ãã¹ã¯ããã»ã©é·ãåŸ ã£ãŠãé¢çœãã£ãŠããŸããã
Babel7ã«äžéžããŸããã Typescriptãå®è¡é床ãé
ãã§ãã誰ãããããèµ·ãããŠãã ããã
:)
@ gs-akhan Babelãã©ã°ã€ã³ã¯ãæ°ãæåã®å€ãããŒãžã§ã³ã®ææ¡ãå®è£ ããŠããŸãã ãã以æ¥ãææ¡ã«å€æŽãå ããããŠããïŒæŒç®åã®è§£ææ¹æ³ã®å€§å¹ ãªå€æŽãå«ãïŒãæ©èœãã¹ããŒãž2ïŒã¹ããŒãž3ã¯èšããŸã§ããªãïŒã«å°éããåã«ããã«å€æŽãå ããããå¯èœæ§ãé«ããããçŸåšã®ããã«ã§èšè¿°ãããã³ãŒãã¯ãã¹ãŠå®éã®æ©èœããªãªãŒã¹ããããšããã©ã°ã€ã³ãç Žæããå¯èœæ§ããããŸãã Babelã¯ãææ¡ãããæ©èœãå®å®ããåã«æå³çã«å®è£ ããä»æ§ã®äœæè ããã®ä»ã®é¢ä¿è ãææ¡ãããæ©èœãè©Šãããšãã§ããããã«ããŸãã Babelãæ©èœãå®è£ ãããããšãã£ãŠãå°æ¥çã«é倧ãªå€æŽãå¿ èŠãšããªãæ¹æ³ã§å®è£ ã§ãããšã¯éããŸããã
@alangpierceããã¯çã«ããªã£ãŠããŸãã ããããšã
ããã¯æ¬åœã«æ¬åœã«çŽ æŽããããªãã¬ãŒã¿ãŒã ãšæããŸãããã«ãŒã«ã解決ãããåã«å©çšã§ããããã«ããããšã¯ãããã¬ã³ã§ããããããè¡ãã€ããã¯ãããŸããã ãªãã¬ãŒã¿ãŒã®å®è¡æã®åäœã¯ãŸã æµåçã§ãã ä»æ¥ã³ãŒããæžããšãããã«ã¯ããããªãæ¹æ³ã§ææ¥ã¯æ©èœããªããªãå¯èœæ§ããããŸãããŸããªã¯ã©ãã·ã¥ãããŒã¿ã®ç Žæãªã©ã誰ãç¥ã£ãŠããã§ããããã å°ãã®å¿èãä»ããªãã«æ°ã¶æå ã®å€ãã®èŠçãæãã§ãããã
ä»æ§ã®æºåãã§ãããŸã§ããã®ãã±ãããããã¯ããïŒéããªãïŒå¿ èŠããããšèãå§ããŸãã
ã¹ããã¯ã¯ãã€æºåã§ããŸããïŒ
@oliverjanikçŸåšã®ãã©ããä»æ§ã¯ããã«ãããŸãã 次ã®TC39äŒè°ïŒ9 / 26-9 / 28ïŒã§ææ¡ãã¹ããŒãž2ã«é²ããããã®è°é¡é ç®ããããŸãã ãã®éããããã®ã¹ã©ã€ãã玹ä»ããŸãã æ©æã«ç¢ºèªããŠãã£ãŒãããã¯ãæäŸãããæ¹ã¯ãææ¡ãªããžããªã«åé¡ãæåºããŠãã ããã
ãã®åé¡ãæ¯æããŠãããŠããããšã@gisenberg ïŒ æ··ä¹±ãé¿ããããã«ãTC39ããŒãã£ã³ã°ã§äœ¿çšã§ãããªãã¬ãŒã¿ãŒã®åšãã®ãªãã·ã§ã³ãæ確ã«ããããã«ãèŠçŽã¹ã©ã€ããããããŸãšããããšãèããŠããŸãããããã§ã«ãããè¡ã£ãŠããŸãã ãèŠäºïŒ
TC39ã®äŒè©±ïŒããã³ã¹ã©ã€ããããïŒã«åœ¹ç«ã€å¯èœæ§ã®ãããã1ã€ã®ããšã¯ãä»ã®èšèªã§ã®æŒç®åã®ã»ãã³ãã£ã¯ã¹ãšæ§æã調ã¹ãããšã§ãã ä»ã®èšèªã¯å¿
ãããJavascriptã§ã®åäœãæ瀺ããå¿
èŠã¯ãããŸããããæ··ä¹±ãé¿ããããã«ãæŒç®åãä»ã®èšèªãšåãããã«ä¿ã€ãšäŸ¿å©ã§ãã
æ¥é±é 匵ã£ãŠãã ãã!!!
ããäžåºŠè©±é¡ããå€ããŠç³ãèš³ãããŸããããããã®äœäººãã®äººã
ã¯ãFlowã§_.get
ã®ãããªå®å
šãªã²ãã¿ãŒé¢æ°ã®ããã«ããããæ©èœããåå®çŸ©ãè¿œå ã§ããããã«ãªã£ãããšãèå³æ·±ããšæããããããŸããã
äŸïŒ flowtype.org/try
ãããŸã§ã§æãçŸããã³ãŒãã§ã¯ãªããnullãšundefinedãæ£ããåºå¥ããŠããŸãããããã以å€ã¯éåžžã«ããŸãæ©èœããŠããããã§ãã
TSã«åãããšãããããã«æ¬ ããŠããã®ã¯ã $NonMaybeType
ã®ãããªãã®ã ãã§ãã
ãã¡ããããã®æŒç®åãäžèŠã«ãªãããã§ã¯ãããŸãããããã¯ãã°ããããšæããŸããã
ããã¯ããã©ã±ãããããããåŒã³åºãã¢ã¯ã»ã¹ãããã³ã»ãã³ãã£ãã¯åäœïŒ undefined
/ null
ã®å³åŽã®åŒã®å¯äœçšã«é¢ããäºæž¬å¯èœæ§ïŒã«é¢ããæ§æã®äžè²«æ§ã«é¢ããæžå¿µã®ãããææ°ã®TC39äŒè°ã§ã¹ããŒãž2ã«å°éããŸããã§ããã x.b
ãnumber
$ã®å Žåã¯$ x.?b()
$ïŒ$ïŒ
ïŒè ã£ãæç©ãæããããã«ãã®ã³ã¡ã³ãã«æ祚ðïŒ
ç¥ãããŠãããŠããããšãã ãªããŠæ®å¿µã ã ã¹ã³ãŒããçããå¿ èŠããããããããŸãããããããã°ãããã·ã³ãã«ã«ãªããŸãããããã§ã䟿å©ã§ããïŒ
ã¹ã³ãŒããçããå¿ èŠããããããããŸãããããããã°ãããã·ã³ãã«ã«ãªããŸãããããã§ã䟿å©ã§ããïŒ
ããã¯TC39ãçŽé¢ããŠãã課é¡ã§ãããããã¯åä»ã§ããã人ã
ããããçµéšããŠãããŠããããããšãèªããªããã°ãªããŸããã 圌ããããªãè€éãªã¬ãã«ã®æ§æãå°å
¥ããã®ã¯æ¬åœã«é£ããã§ãããããŠå®éããã®å Žåãèšèªã®åŒ±ãåä»ãã¯å®éã«å¯ŸåŠããªããã°ãªããªãããªãã®éã®ãšããžã±ãŒã¹ãåŒãèµ·ãããŠããŸãããŸãã¯ããªãã¯ããã§ã¯ãªãã³ãŒããæã«å
¥ããŸãð¥èª°ã«ãšã£ãŠãè¯ããããŸããã ãã®ãããªæŒç®åãå°å
¥ããã°ãå®éã«ãã®ç¯å²ãçããããšãã§ãããšã¯æããŸããã å®è£
è
ãã±ãŒã¹ã®90ïŒ
ãã«ããŒããæ¹ãç°¡åã§ãããæ®ãã®10ïŒ
ã§ã¯Â¯\_(ã)_/¯
ãæå¹ãªã³ãŒãã§ã¯ãªããšæããŸãã
ã¿ããªã3幎以äžåŸãç§ã¯å§å¡äŒã«ãããªãããã¡ãã¯ããšèšã£ãŠãTypeScriptã«æ £çšçãªãã®ã¯äœã§ããç§ãã¡èªèº«ã®ããæ¹ã§ãããããæãæ¥ããšæããŸãã ãã®æ©èœã¯ããšã«ããéçåä»ããªãã§ã¯æ£ããæ©èœããŸããã
TC39ã®ææ¡ãšæ瀺çã«äºææ§ã®ãªãæ§æã䜿çšããŠTypeScriptã®å®è£ ãäœæããŸãã ESãsafe-navæŒç®åãååŸãããšãTypeScriptã«ã¯2ã€ã®ãªãã·ã§ã³ããããŸãã1ã€ã¯ESãšäºææ§ã®ãããã ããªãã»ãã³ãã£ã¯ã¹ãæã¡ããã1ã€ã¯åã·ã¹ãã ã«é¢é£ä»ããããŠããŸãã ããã¯ãTS safe-navæŒç®åãã©ã®ãã¿ã€ããã§ã䜿çšã§ããªãããšãæå³ããããã§åé¡ãããŸããã
@notsnotso Typescriptã¯JSãå£ãããšã¯æ³å®ãããŠããŸãããããããCoffeescriptã®ç®çã§ãã
ãã¶ãè¯ã解決çã¯æ¬¡ã®ãšããã§ãã
æ£çŽèšã£ãŠããããããŸããããªãã£ãã®ã¯é©ãã§ã¯ãããŸããã ç§ã®ãªãªãžãã«ã§ã¯
æçš¿ã§ã¯ãã€ã³ããã¯ã¹äœæãé¢æ°åŒã³åºããªã©ã«é¢ãããããŸãããææããŸããã
æ£çŽãªãšããã ?.
ã«ã€ããŠèããã°èããã»ã©ãããã§ã¯ãªãããã«æããŸãã
undefined
ããããããJavaScriptã«å±ããŸãã
ç§ã¯ããããã®åé¡ã解決ãããã£ãšæ±çšçãªãŠãŒãã£ãªãã£ã欲ããã§ã
ãã£ãšã ç§ãæã£ãŠãã1ã€ã®èãã¯ãã€ã³ã©ã€ã³try/catch
ã®ãããªãã®ã§ãã
åŒïŒ let x = try a.b.c else 0
ïŒãšæŒç®å
ãfalseyãïŒããšãã°ãx || 1ïŒã§ã¯ãªããnullyãïŒããšãã°ãx ?? 1ïŒããã§ãã¯ããŸããã
ãããã£ãŠã次ã®ããã«çµã¿åãããŸãïŒ try a.b.c ?? 0 else 0
ã ããã¯èšèã§ããã¯ãã
ããããåºæ¬çã«ã¯æ¬¡ã®ããã«è¿°ã¹ãŠããŸããabcãè©äŸ¡ããŠã¿ãŠãçµæãnull
ã
undefined
ã0ãè¿ããŸããaãŸãã¯bãundefined
ã§ãããäŸå€ãã¹ããŒãããå Žåã
ããããã£ãããã0ãè¿ããŸãã
å¥ã®æ¹æ³ã¯ã else
å¥ããªãã·ã§ã³ã«ããããã©ã«ãã§
undefined
ã 次ã«ãåŒã次ã®ããã«èšè¿°ã§ããŸãïŒ let x= (try a.b.c) ??
0
ã ããã¯ããªãã³ã³ãã¯ãã§ããããŸãããåé¿ããããå€ãã®æ©èœãæäŸããŸã
ä»ã®åé¡ã解決ã§ããæ±çšãœãªã¥ãŒã·ã§ã³ã
代ããã«ãããæšé²ãã¹ãã ãšèšã£ãŠããã®ã§ã¯ãããŸããã ç§ãèšã£ãŠããã®ã¯ããã«ãããã¹ãŠã§ã
?.
ã®ä»£æ¿æ段ã§ãããç§ãã¡ã
JavaScriptèšèªã«ããåããã®ãèŠã€ããŠãã ããã
2017幎10æ5æ¥æšææ¥åå7æ51åãDmitry [email protected]
æžããŸããïŒ
@notsnotso Typescriptã¯JSãå£ãããšã¯æ³å®ãããŠããŸãããããã
Coffeescriptã¯ã®ããã®ãã®ã§ããâ
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/16#issuecomment-334441781 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABTgPilbZfuKc2egdBrYfdTHHeDl3F6Sks5spMLLgaJpZM4CNapf
ã
@zlumerçŽ æµãªãžã§ãŒã¯ã ããã¯èšã£ãŠããTSåºæã®æ©èœã¯Javascriptãå£ãããšã¯ãããŸããã
@jehugaleahsaç§ã¯ããªãã®ææ¡ã奜ãã§ãããããŠããã¯ä»ã®èšèªã§èŠã€ããããŸãã TSã§ã¯åé¡ãªãåäœãããšæããŸãã
ECMAScriptãæŒç®åãåãå ¥ãããŸã§åŸ ã€å¿ èŠãããããšãç§ã¯æ¬åœã«ç解ããŠããªããšèšããŸãã TypeScriptã¯ãã¯ã©ã¹ãã¢ãžã¥ãŒã«ãã©ã ããECMAScriptã«å°å ¥ãããã£ãšåã«è¿œå ããŸããã å®éãTypeScriptã®ç®æšã®1ã€ã¯ãå®éšçãªJSæ©èœãè©Šéšçã«å°å ¥ããããšã§ããã ç¬èªã®å®è£ ãæäŸããTypeScriptã¯ãå§å¡äŒã§ã®ãããã®è°è«ã«æ å ±ãæäŸããã®ã«åœ¹ç«ã€ããšã¯ééããããŸããã
å§å¡äŒãæçµçã«å¥ã®æ¹åã«é²ãåã«ãçããã¯ç»æçãªå€æŽãåãã§åããŠããŸããããªããã®æ©èœãããã»ã©ç°ãªãã®ããç§ã«ã¯ããããããŸããã
async / awaitãåæã®æ®µéã§TypeScriptã«å°å ¥ãããŸããã
ããã¯èšã£ãŠããTSåºæã®æ©èœã¯Javascriptãå£ãããšã¯ãããŸããã
ãTSåºæã®æ©èœãã®ãããªãã®ã¯ãããŸããã詳现ã«ã€ããŠã¯ã TypeScriptã®èšèšç®æšã確èªããŠãã ããã
TypeScriptã¯ãESãæããéãé²ãåã«å°çããŸããæ¢åã®ãã®ãããã€ãããå¯èœæ§ããããŸããããããã¯äºææ§ã®ããã«ä¿æãããŠããŸãã
TypeScriptã¯ãã¯ã©ã¹ãã¢ãžã¥ãŒã«ãã©ã ããECMAScriptã«å°å ¥ãããã£ãšåã«è¿œå ããŸããã
ãããŠãç¹ã«ã¢ãžã¥ãŒã«ã¯ãæ··ä¹±ãçµããããããšã®ãªã倧ããªå€§å€±æã§ãã ããã¯ãTypeScriptããŒã ã_ééã_ã®äŸãšããŠç¹°ãè¿ã䜿çšããããŸãã«ãæ©ãéããžã£ã³ããããäŸã§ãã çŸåšãç§æå°ãè¿«ã£ãŠããŸããããããéå»5幎éprivate
ã«æè¬ããŠããŸãããæ··ä¹±ãæãããšã¯ãããŸããã
ç¹°ãè¿ãã«ãªããŸããããã³ã¬ãŒã¿ã¯ãã©ã°ã®äžã§å©çšå¯èœã§ããããã³ã¬ãŒã¿ãå®éã«ã¹ããŒãž3ã«å°éããŠãããããTypeScriptã®åå®è£ ãšã³ãŒãã®ç Žæãå¿ èŠã«ãªããŸãã ãã®ããããããã®ããšã¯èµ·ããããã«ãããŸããã
async / awaitãåæã®æ®µéã§TypeScriptã«å°å ¥ãããŸããã
ECMAScriptããããŒã¶ã«ãã¹ããŒãž3ã«å°éãããšã
誰ãäžæ£è¡çºãããŠããŸãããããã®äŒè©±ããµãŒã¯ã«å ïŒãã©ã°ããã£ãå Žåã¯ã©ããªããŸããïŒã¯ãããã©ã°ãèªèããŠããŸãïŒãŸãã¯ãããã¯å€ïŒTSãJSã§ãªããªã£ãå Žåã¯ã©ããªããŸããïŒããã5幎åŸã¯å€æŽãããŸããïŒä»¥å€ã®å Žæã«è¡ããªãå Žåãã®ããšã«ã€ããŠã®ç§ãã¡ã®å¿ïŒãç§ãã¡ã¯ãããæã£ãŠããå¿ èŠã¯ãããŸããã ESå§å¡äŒããã®ã»ãã³ãã£ã¯ã¹ãããã¯ããŠã³ãããšãã«ãããæ£ç¢ºã«å®è£ ããããšãçŽ3幎åããèšã£ãŠããŸããã
ç¹°ãè¿ãã«ãªããŸãããããããŒã¶ã«ãªããžããªã¯https://github.com/tc39/proposal-optional-chainingã§ãããããã§é²è¡ç¶æ³ã远跡ã§ããŸãã 次åã®TC39ããŒãã£ã³ã°ã§ãææ¡ã®å¯èœæ§ãé«ããããã«ããªãã©ã€ã³ã§äœæ¥ããŸãããããæ¬åœã«ããããããã§ãã
æŽæ°ïŒä»æ¥ã®ååŸãTC39ã§ã¹ããŒãž2ã«å°éããŸãã!!!
ãç¥ãã®ç®çã§ã®ã¿ãããç°¡åã«ããã¯è§£é€ããŸã
ãã£ããŒïŒ
ã¹ãã ããªãã§ãã ãã...
èªåã®æ°æã¡ãè¡šçŸããçµµæåãéãããšãã§ããŸã
ã¹ãã ããªãã§ãã ãã...
èªåã®æ°æã¡ãè¡šçŸããçµµæåãéãããšãã§ããŸã
ããã«ããã®ããã«çµµæåã®æ°ãå¢ããã®ãèŠãã®ã楜ããã§ãã åé¡ã®ã³ã¡ã³ããããã»ã©æ¥éã«äººæ°ãåããŠããã®ãèŠãããšããããŸããã
ãªã¢ã«ã¿ã€ã ã¢ããããŒãã®å°ããªãããªãé²ç»ããŸããhttps://youtu.be/JLBrgPjeGhc
誰ããç§ããã®ããšããéäŒãããããšãã§ããŸããïŒ
@DanielRosenwasseråè«ãèšã£ãŠããªãå ŽåããŸãã¯ç»é²ã解é€ããããæ¹æ³ãããããªã人ã®ããã«ãå³åŽã®ãµã€ãããŒã§ãã®ãã¿ã³ãæ¢ããŠããŸãã
èšããŸã§ããªããé»åã¡ãŒã«ã«ã¯æ¬¡ã®ãªã³ã¯ããããŸãã
ããã¯åè«ã§ãããç§ã¯ææ¡ã«åãçµãã§ããŸãã
ãã®åé¡ã®ããã¯ã解é€ããåŸã®@RyanCavanaugh ïŒ
ãããã€ãã«çéžããã®ãèŠãŠæ¬åœã«è奮ããŠããŸãïŒ ðð
äžèŽããVSCodeã¯ã€ãã¯ãã£ãã¯ã¹ãåŸ ã€ããšã¯ã§ããŸããð
ç§ã¯@@ RyanCavanaughã«è¡ããŸãããªããªãã圌ã¯ãããããã®ã¹ã¬ããã®è³Œèªã解é€ãããŠããã倱瀌ã«ãªãããããã§ãã ïŒãããŠ@DanielRosenwasserã¯è¯ã尺床ã§ãïŒ
@kitsonkãå°»ã«ãªããªãã§ãã ããã 人ã ã¯èªç±ã«éäŒã§ããå«ããããåããããšã¯ãããŸããã
@kitsonk ããªãRyanCavanaughãŸãã¯DanielRosenwasserããã®ã¹ã¬ããã®è³Œèªã解é€ãããã®ã§ããïŒ ã©ã€ã¢ã³ã¯ãã®åé¡ã®ããã¯ã解é€ãããããšã«ã¯ããªãã®äžã®3ã€ã®ã³ã¡ã³ãã«çããŸããã
ãããã賌èªè§£é€ããããšããŠããããããã¹ãã ããããšã«ãã£ãŠéç¥ã®ç²åŽãåŒãèµ·ããå¿ èŠã¯ãããŸããã
ã©ãããGitHubã¯ç®èãªãŠãŒã¢ã¢ã®ããã®ã²ã©ãå Žæã§ãããžãŒ...
ãã®æ°ããèšèªæ©èœã®åä»ãªè©³çŽ°ãç解ããŠãããTC39ã®ãã£ã³ããªã³ã«æè¬ããŸãïŒ
@kitsonkã¯ãç§ãããã ã£ãããã«ãåè«ãèšã£ãŠãããšæããŸãã ç§ãã¡ã¯è奮ã®åšãã§å°ãã°ãããŠããŸãããããã¯CoCã«åŸã£ãŠç©äºã瀌åæ£ããä¿ã€ããã®ç©ãããªãªãã€ã³ããŒã§ãã
@DanielRosenwasser
ãããè©ŠããŠã¿ãå¿
èŠããããŸããïŒ ãŸãã¯ã @ rbucktonã«ã¯ããã«å¥ã®ãã©ã³ãããããŸãðð»ââïž
ããããŸãããããããŸããhttps://github.com/microsoft/TypeScript/commits/optionalChainingStage1ð€Šð»ââïž
æ®å¿µãªãããããã¯ããªãæ代é ãã§ãã
ãã®å·ã¯5幎åã«éãããããšã«æ°ã¥ããŸããã ïŒã³ã£ããïŒ
@rbuckton
æ®å¿µãªãããããã¯ããªãæ代é ãã§ãã
ãããè©ŠããŠã¿ãŸãããïŒ
ç³ãèš³ãããŸããã@ jhpratt @ MatthiasKunnenGitHubã§åãã³ã³ããã¹ããå ±æããŠããããã§ã¯ãªãããšãå¿ããŸããã ç§ã¯é·ãéãã®èŸºãã§è·³ãåã£ãŠããŠãã©ã€ã¢ã³ãšãããšã«IRLãšäžç·ã«æéãéãããæè¿ã®ã€ãã³ãã«ç°¡åã«åå ããŠãç§ã®èª€è§£ãããå 茪ãã¿ãåŒãèµ·ãããŸããã è¬çœªã
ãããããã®åé¡å šäœã¯ãTypeScriptã®èšèšåçã®èå³æ·±ãèå€åŠã瀺ããŠããŸãã Ryanã¯ãTypeScriptãECMAScriptã§çå£ã«æ€èšããåã®æ§æãå®éã«æ€èšããŠãããšãã«ããããæèµ·ããŸããã TypeScriptãå éšçã«ãèšèªã«æ·±å»ãªåœ±é¿ãåãŒããŠããES2015æ§æãäºæž¬ããããã€ãã®ã¬ãã¹ã³ãåŠãã§ããã®ã¯ãã®é ã§ããã ããŒã ã¯ãTC39ã¹ããŒãž3ã®ææ¡ãåºããŸã§ãåå ãæ€èšããªãããšã«ããŸããã
@RyanCavanaughã¯ããã«å¯ŸåŠã§ãã圌ã¯ææ¡ã§èµ·ãã£ãããšã«è¿ã¥ããŠããããšãç§ã¯ç¥ã£ãŠããŸããã2014幎ã«ããŒã ãå®è£ ãããã®ãçŸåšã®ã¹ããŒãž3ã®ææ¡ãš100ïŒ äºææ§ããããšã¯èããããªãã£ããšæããŸãã ãããã£ãŠãããã¯ç¢ºãã«ãç¥ãã§ãããææ¡ã®åäœãšå®å šã«äžèŽããªãå®å šãªããã²ãŒã·ã§ã³æŒç®åã䜿çšããTypeScriptã³ãŒãã5幎éãªãããšã«ãæè¬ããŸãã
ð
ããã¯ã Waiting for TC39ã©ãã«ãåé€ããç¬éã§ããïŒ ð€
ããã¯ã Waiting for TC39ã©ãã«ãåé€ããç¬éã§ããïŒ ð€
ãããŠship-it
ãè¿œå ããŸã
ããã
ã€ãã«ã æåéãããªãã·ã§ã³ã®ãã§ãŒã³ã«ã€ããŠè³ªåããŠããŸãããããã¯ãã€ã¹ããŒãž3ã«ãªãã®ãããããŠãã ïŒ ãããæŒãé²ããããã«åããŠãããã¹ãŠã®äººã«æè¬ããŸãïŒ
ãã®ã¹ã¬ããããã¥ãŒãããæ¹æ³ã¯ïŒ :)
@opnksynã¹ãã ã®è奮ãæ°ã«ããªãå Žåã¯ããã®åé¡ã解決ããããšãã«éç¥ãåãåãæ©èœããããŸãã ããã«ãããäœæããã°ããã®ãããªéç¥ã«ãã¹ãŠã®ã³ã¡ã³ãã衚瀺ãããªããªããŸãð
ãã§ã«å®çŸ©ãããŠããæŸåºãœãªã¥ãŒã·ã§ã³ã¯ãããŸããïŒ
ãã®ãããªãã®ã¯èå³æ·±ããããããŸããïŒ
function __chain<T extends object, U>(value: T|null|undefined, callback: (value: T) => U): U|undefined {
if (value !== null && value !== undefined) {
return callback(value);
}
return undefined;
}
type Foo = { x?: { y?: { z?: () => number } } }
const foo: Foo|null = { }
// foo?.x?.y?.z?()
const value = __chain(foo, _a => __chain(_a.x, _b => __chain(_b.y, _c => __chain(_c.z, _d => _d()))));
äžèŠãªé¢æ°ã¹ã³ãŒãã®äœæãåé¿ãããããBabelãè¡ãããšã奜ã¿ãŸãã
var _foo, _foo$x, _foo$x$y, _foo$x$y$z;
// foo?.x?.y?.z?.()
(_foo = foo) === null || _foo === void 0 ? void 0
: (_foo$x = _foo.x) === null || _foo$x === void 0 ? void 0
: (_foo$x$y = _foo$x.y) === null || _foo$x$y === void 0 ? void 0
: (_foo$x$y$z = _foo$x$y.z) === null || _foo$x$y$z === void 0 ? void 0
: _foo$x$y$z.call(_foo$x$y);
äžèŠãªé¢æ°ã¹ã³ãŒãã®äœæãåé¿ãããããBabelãè¡ãããšã奜ã¿ãŸãã
var _foo, _foo$x, _foo$x$y, _foo$x$y$z; // foo?.x?.y?.z?.() (_foo = foo) === null || _foo === void 0 ? void 0 : (_foo$x = _foo.x) === null || _foo$x === void 0 ? void 0 : (_foo$x$y = _foo$x.y) === null || _foo$x$y === void 0 ? void 0 : (_foo$x$y$z = _foo$x$y.z) === null || _foo$x$y$z === void 0 ? void 0 : _foo$x$y$z.call(_foo$x$y);
åæããŸãã@ ExE-Bossã äžèŠãªé¢æ°ã¹ã³ãŒããäœæããªãããšãçæ³çã ãšæããŸãïŒã³ã³ãã€ã«ãããã³ãŒããå°ãéãå Žåã§ãïŒ
ã³ã³ãã€ã«ãããã³ãŒãã«ã€ããŠè©±ããŠãããšããããã©ãŒãã³ã¹ãšESä»æ§ãžã®æºæ ã¯ãèªã¿ãããããã確å®ã«åã€ã¯ãã§ãã
Babelã«ãã£ãŠã³ã³ãã€ã«ãããã³ãŒããnull
ãšvoid 0
ã®äž¡æ¹ãšæ¯èŒããŠãåçŽãª== null
ã§ã¯ãªãããªãã«ã€ã³ãŒã«ã䜿çšããçç±ã¯ãããŸããïŒ
Babelã«ãã£ãŠã³ã³ãã€ã«ãããã³ãŒãã
null
ãšvoid 0
ã®äž¡æ¹ãšæ¯èŒããŠãåçŽãª== null
ã§ã¯ãªãããªãã«ã€ã³ãŒã«ã䜿çšããçç±ã¯ãããŸããïŒ
@proteria__Babel__ã®ãªãã·ã§ã³ã®ãã§ãŒã³ã³ãŒãããã£ãšèŠãŠã¿ãŸããã loose
ãªãã·ã§ã³ãæž¡ããŠããããçã®å€ã«èšå®ãããšãå³å¯ãªç䟡æ§ãã§ãã¯ãçæãããªãããã§ãã
ããã¯ã document.all
ïŒãŸãã¯è¡åŠçã«ã¯[[IsHTMLDDA]]å
éšã¹ãããïŒãåå ã§ããããã¯ãäžäœäºææ§ã®ããã«èšèªã§ç¹å¥ãªæ±ããåããçã§ãã
document.all == null // true
document.all === null || document.all === undefined // false
ãªãã·ã§ã³ã®é£éææ¡ã§
document.all?.foo === document.all.foo
ãã ãã document.all == null ? void 0 : document.all.foo
ã¯èª€ã£ãŠvoid 0
ãè¿ããŸãã ã«ãŒãºã¢ãŒãã§ã¯ãã»ãšãã©ã®äººããšã«ããdocument.all
ãåŠçããå¿
èŠããªãããããã®ä»æ§ã®è©³çŽ°ã¯åçŽå/ããã©ãŒãã³ã¹/çæãããã³ãŒããµã€ãºã®ããã«åŽäžãããŸãã
確ãã«document.all
ã®å Žåã¯ç¹å¥ãããããŸãããïŒ ãªããžã§ã¯ããšããããã£ããã§ãã¯ããããã«æ°è¡ãè¿œå ããã ãã§ãäœåãªã³ãŒãã¯ããã»ã©å¿
èŠãããŸããã
document.all
ãå€æ°ã«å²ãåœãŠãããšãã§ããããã䜿çšãããŠããå Žæã远跡ããã«ã¯åã·ã¹ãã ãå¿
èŠã§ãããã®ãããBabelã¯ããã©ã«ãã§æ¬¡ã®ããã«åºåããŸãã
(_prop = prop) === null || _prop === void 0 ? void 0 : _prop./* do stuff */;
ç§ã¯ãããç¥ã£ãŠããŸãã Babelã«ã¯åã·ã¹ãã ããããŸããããTypeScriptã«ã¯ãããŸãã æã£ãã»ã©ç°¡åã§ã¯ãªããããããŸãããã䜿çšç¶æ³ã远跡ã§ããç¹å®ã®ç¶æ³åãã®ã³ãŒãããã§ã«ãããšæããŸãã
å®éã«ã¯ã document.all
å€æ°ã远跡ããããã®åã·ã¹ãã ã¯å¿
èŠãããŸãããããã¯ãç¹å¥ãªåäœãå®éã«ã¯document.all
HTMLAllCollection
ã«ããããã§ãã
ãããã£ãŠã instanceof HTMLAllCollection
ã®ãã§ãã¯ãå®è¡ã§ããã¯ãã§ããããããã°ãéè²ã«ãªããŸãã
ãããã§ã... === null || === void 0
ãã§ããã®ã«ããªãinstanceof
ãããã®ã§ããïŒ ç¢ºãã«ããã¯ãã£ãšç°¡åã§ãã
確ãã«-ç§ã¯ããªããdocument.all
ã远跡ããããã«åã·ã¹ãã ãå¿
èŠãšããªãããšãææããŠããŸãã:)
å人çã«ã¯ããããå£ããŠèª°ãæå¥ãèšãã®ããç¥ããããªããŸãããããã¯ä»æ§ã«å«ãŸããŠããã®ã§ãããã«åºå·ããã®ãæãç°¡åã§ãã
@noppaã³ã³ãã€ã«æã«å®è¡ã§ããŸãã foo instanceof HTMLAllCollection
ãtrue
ã®å Žåã foo === null || foo === void 0
ãæŸåºããŸãããã以å€ã®å Žåã¯ã foo == null
ãå®å
šã«æŸåºã§ããŸãã
@ G-Rath奜ããšå¥œãŸãããšã«ããããããå»æ¢ããããããšãã£ãŠãæ©èœããªããšããæå³ã§ã¯ãããŸããã TypeScriptã¯JavaScriptãšã®äºææ§ãç¶æããå¿ èŠããããŸãã
@jhprattããããããã¯çŸåšã TypeScript Design NonâGoalsã«åããŠããŸãã
ãŸãã HTMLAllCollection
ãå²ãåœãŠãããšãã§ãããã®ã«ã€ããŠã¯ã foo === null || foo === void 0
ãå®è¡ããå¿
èŠããããŸãã any
ãŸãã¯object
ãªã®ã§ãããã ãã®äŸ¡å€ã¯ãªããšæããŸãã
ããªãã¯éç®æšã«ã€ããŠèšåããŠãããšæããŸãïŒ5ïŒ
ããã°ã©ã ã«å®è¡æåæ å ±ãè¿œå ãŸãã¯äŸåããããåã·ã¹ãã ã®çµæã«åºã¥ããŠç°ãªãã³ãŒããçºè¡ããŸãã 代ããã«ãå®è¡æã®ã¡ã¿ããŒã¿ãå¿ èŠãšããªãããã°ã©ãã³ã°ãã¿ãŒã³ã奚å±ããŠãã ããã
ããã¯ç¢ºãã«ã¿ã€ãã«åºã¥ããŠç°ãªãã³ãŒããåºåããããšã«åæããŸãããããã¯ã³ãŒããµã€ãºãæžããããã ãã§ãã ãææã®ãšããã HTMLAllCollection
ããã§ãã¯ããã»ã©ç°¡åã§ã¯ãããŸããã
å
¬å¹³ãæãããã«ãTSã¯åæ
å ±ã䜿çšããæœåšçãªãããã¡ã€ã¢ãæåŠããŸãããããã¯ïŒäžçš®ã®ïŒé¢é£æ§ããããŸãã == null
ãçºè¡ããäž»ãªçç±ã¯ãåæ
å ±ã«åºã¥ããŠã³ãŒããµã€ãºãçž®å°ããããšã§ãã
ãããå®è£ ãããŠããªãå Žåã¯ãlangããŒã ãBabelã®ãç·©ãããªãã·ã§ã³ãšåæ§ã®ãªãã·ã§ã³ãtsconfigã«è¿œå ãããšäŸ¿å©ã§ãã
ãã°ãã確èªããåŸã terser foo === null || foo === undefined
ãfoo == null
ã«èªåçã«å€æããŸããããã¯ããã®ãšããžã±ãŒã¹ã®ããã«å®å
šã§ã¯ãããŸããã
ãããå®è£ ãããŠããªãå Žåã¯ãlangããŒã ãBabelã®ãlooseããªãã·ã§ã³ãšåæ§ã®ãªãã·ã§ã³ãtsconfigã«è¿œå ãããšäŸ¿å©ã§ãã
é¢é£ããŠãç§ãã¡ã®å€ãã¯ããã«ãããŒã«ãã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ã«TypeScriptã䜿çšããŠããŸããããã©ãŠã¶ãŒã®å¶çŽã«ã€ããŠå¿é ããå¿ èŠã¯ãããŸããã
å®éãTSãšBabelã®äž¡æ¹ãäžç·ã«äœ¿çšããŠããããããããã®ãªãã·ã§ã³ã®1ã€ã¯ããªãã¬ãŒã¿ãŒãBabel /åºã«ãªãã©ã³ã¿ã€ã ã«ãã¹ã¹ã«ãŒããããšã§ãã
@fbartho
å®éãTSãšBabelã®äž¡æ¹ãäžç·ã«äœ¿çšããŠããããããããã®ãªãã·ã§ã³ã®1ã€ã¯ããªãã¬ãŒã¿ãŒãBabel /åºã«ãªãã©ã³ã¿ã€ã ã«ãã¹ã¹ã«ãŒããããšã§ãã
ãã®ã³ã¡ã³ããããããŸããã æŒç®åãBabelã«ãã¹ã¹ã«ãŒããããã®è¿œå ã®ãªãã·ã§ã³ã¯å¿
èŠãããŸããã TypeScriptãBabelçšã«èšå®ããŠããå Žåã¯ããã§ã«noEmit: true
ããããããã¯ãã§ã«_everything_ãBabelã«æž¡ããŸãã
@Zarel Babelã®TypeScriptå®è£ ã«ã¯ãåå空éãconståæåãªã©ãã³ãŒãããŒã¹ããã§ã«äŸåããŠããããã€ãã®æ©èœããããŸããã ãšããããæå¹ã«ããŠTSCã䜿çšãã2çªç®ã®å€æãšããŠBabelãé©çšããŠããŸãã ïŒåå空éã®åé€ã«åãçµãã§ããŸãããäžäžèŽã®æ©èœããã¹ãŠåé€ã§ãããã©ããã¯äžæã§ãïŒ
ãã®ã¹ã¬ããã«ã¢ã¯ã»ã¹ãã人ã¯ãã¹ããŒãž3ã®åæã®çºè¡šããå§ããŠãããããå§ãŸãã³ã¡ã³ããèªãå¿ èŠããããŸãïŒGitHubãããã¹ãŠãããŒãããç°¡åãªæ¹æ³ããªãã倧éã®ãŠãŒã¶ãŒã³ã³ãã³ããé衚瀺ã«ããããšãéé£ããŸãïŒ
åªããæ©èœ-ããªãã·ã§ã³ã®é£éã/ãå®å šãªããã²ãŒã·ã§ã³ãã ç¹ã«TypeScriptã®strict-modeã§ã ããããŸããªãå®è£ ããããšèããŠçŽ æŽãããã§ãã â€ïž
ããã¯ç§ãããã«é£ããŠããŸããããããŠç§ã¯ããããµããŒããããããšãé¡ã£ãŠããŸãã åãªããŠãŒã¹ã±ãŒã¹ïŒ
TypeScript3.7ã§æåŸ ãããŠããŸãã
document.querySelector('html')?.setAttribute('lang', 'en');
VS
çŸåšTypeScript3.5ã«ãããŸãã
const htmlElement = document.querySelector('html');
if (htmlElement) {
htmlElement.setAttribute('lang', 'en');
}
ããã¯ãšã©ãŒãªãã§æ©èœããŸããïŒ ãããšããããã¯ãŸã TypeError: Cannot read property 'setAttribute' of null.
ã§ããïŒ ?
opã null /æªå®çŸ©ã®åŸã«ãã§ãŒã³ããã£ã³ã»ã«ããå¿
èŠããããŸãã
class Test {
it() {
console.log('One');
document.querySelector('html')?.setAttribute('lang', 'en');
console.log('Two');
}
}
new Test().it();
ç§ã¯æ¬¡ã®ããšãæåŸ
ããŠããŸãïŒ
htmlèŠçŽ ãååšããªãå ŽåïŒnullïŒã ã³ã³ãœãŒã«ã¯One
ãšTwo
ããã°ã«èšé²ããå¿
èŠãããã setAttribute
ã¡ãœããã¯åŒã³åºãããŸããã ïŒãšã©ãŒãªãïŒã
ç§ã¯ãããæ£ããç解ããŸãããïŒ
@domskeåèãŸã§ã«ãããã¯å³å¯ã«ã¯TSæ©èœã§ã¯ãããŸããã ããã¯JSã®æ©èœã§ãã
TC39ã®ææ¡ã«ãããšãæ§æã¯æ¬¡ã®ããã«ãªããŸãã
document.querySelector('html')?.setAttribute?.('lang', 'en');
è°è«ã¯åã³åŸªç°ãå§ããã®ã§ãç§ãã¡ã¯ããã¯ãããç¶æ ã«æ»ããŸãã
100ã³ã¡ã³ã以äžã®é·ãGitHubã¹ã¬ããã«ã³ã¡ã³ããæ®ããŠã以åã®ãã¹ãŠã®ã³ã¡ã³ããæåã«èªãããšãæ¬åœã«çŽæããããšæã£ãŠãã人ã«ã¯ãæ¬åœã«ãé¡ãããŸãã ããããããªãã®è³ªåãšãã®çãã¯ããã«ãããŸãïŒ
æãåèã«ãªãã³ã¡ã³ã
ãªãã·ã§ã³ã®é£éã¯ã¹ããŒãž3ã§ã
ãç¥ãã®ç®çã§ã®ã¿ãããç°¡åã«ããã¯è§£é€ããŸã