TypeScriptã§ã¹ããŒãž1ã®ãã©ã€ããŒããã£ãŒã«ãã®ææ¡ãå®è£ ããŠãããšãããšæããŸãã ããã¯äž»ã«çŸåšã®ç䌌ãã©ã€ããŒãå®è£ ã«åã£ãŠä»£ãããå®å šã«æ£ããå®è£ ã¯ã¯ã©ã¹ããšã®WeakMapsã䜿çšããŠES6ã«ã®ã¿å€æã§ããŸãã ä»æ§èªäœãå éšã§WeakMapsã䜿çšããŠãã©ã€ããŒãç¶æ ãã¢ãã«åããŠããããšã«æ³šæããŠãã ãããããã¯ãææ¡ã®å®è£ ã«åœ¹ç«ã€å¯èœæ§ããããŸãã
çŸåšãææ¡ã«ã¯ãã©ã€ããŒã_properties_ã®ã¿ãå«ãŸããŠããŸãããã¡ãœãããç¶ãå¯èœæ§ããããŸãã ãŸããææ¡ã®æãéèŠãªéšåã¯ããã©ã€ããŒãããããã£ã¯ã¯ã©ã¹èªäœã®äžã§ã®ã¿å©çšå¯èœã§ãããšããããšã§ãã
TypeScriptããŒã ã¯ãæ§æãšèšå·/æåãã¬ãã£ãã¯ã¹ã®äœ¿çšã«ã€ããŠã©ãæããŸããïŒ
å人çã«ã¯ã²ã©ãèŠãç®ã ãšæããŸãããã©ãããæè¡çãªéçããããŸãïŒç§ã«ã¯ããããããªãã®ã§ã䜿ãæ¹ã¯å¯èŠæ§ãç¹å®ããå¿ èŠããããŸãïŒã
TypeScriptãçŸåšã®ãã©ã€ããŒã/ä¿è·ãããæ§æã倱ãã®ãèŠãã®ã¯æ²ããããšã§ããããã¯ã¯ããã«ã¯ãªãŒã³ã§ä»ã®å€ãã®èšèªãšäžè²«æ§ããããŸãã ããã¯èµ·ããããã§ããïŒ ä»£æ¿æ段ã¯ãããŸããïŒ
ããã«å ããŠã #
ãš@
ã·ã³ãã«ãåãæ¿ããïŒã€ãŸãããã³ã¬ãŒã¿ã«#
ã䜿çšããïŒããšã«ã€ããŠã®è©±ããããŸããããã¯æããã«TypeScriptã«ã圱é¿ãåãŒããŸãã ã
ããããã²ã©ãããšæããŸãã ::
ãã€ã³ãæŒç®åã®ããã«ãå®éã«ã¯ããã»ã©é ããŸã§ã¯è¡ããŸããã§ããããT39ã§å°ãå
ã«é²ããŸã§ãå®è£
ããããšããŠã延æãã䟡å€ããããšæããŸãã å°ãã©ããªä¹ãç©ã«ãªãã®ã§ã¯ãªãããšæããŸãã ãŸãããã¹ãŠã®ã¢ã¯ã»ã¹ãµã€ããæžãçŽãå¿
èŠããããããããããµããŒãããããã®ããŠã³ãšãããã¯ããªãé£ãããšæããŸãã
ç§ãå®å šã«ç解ããŠããªãçç±ã®ããã«ã䜿çšæ³ã¯å¯èŠæ§ãèå¥ããå¿ èŠããããŸã
äž»ã«ã䜿çšãµã€ãã§ããããã£ã®ã«ãã¯ã¢ããæ¹æ³ãç¹å®ããå¿ èŠãããããã§ããããã¯ãåå«ã¯ã©ã¹ãç¥å ã®ãã©ã€ããŒãããããã£ã«ã€ããŠãç¥ããå¿ èŠãªãã«åããã©ã€ããŒãåãåå©çšã§ããããã«ãç°ãªãã«ãã¯ã¢ããã¢ã«ãŽãªãºã ãå¿ èŠãªããã§ãã
ææ¡ãããæ§æã®å©ç¹ã®1ã€ã¯ã this
ãçç¥ããŠã #field
çŽæ¥äœ¿çšã§ããããšã§ãã ããã«ãå°ç« ã¯ãã³ã¬ãŒã¿ïŒhttps://github.com/tc39/proposal-private-fields/issues/32ïŒãšäº€æã§ãã代ããã«@
ã䜿çšãããããã @field
䜿çšããŸãã
ããã©ã€ããŒããã§ã¯ãªãããŒã¯ãŒãããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã«äººã ãæºè¶³ãããšã¯æããªãã
JavaScriptã®ããã«äžè¬çãªeval
ããµããŒãããªããããããè¡ãè¯ãæ¹æ³ãããããŸãã-å
·äœçãªããŒã¯ã³ã¯ãããçšåºŠã®å·®å¥åãå¯èœã«ããTypeScriptã®ããã«éçåã·ã¹ãã ã«åºã¥ããªããã©ã€ããŒãç¶æ
ããµããŒãããããšãå¯èœã«ããŸãã https://github.com/tc39/proposal-private-fields/issues/14ã§ããã€ãã®ä»£æ¿æ§æã«ã€ããŠèª¬æããŸããããTypeScriptã®çŸåšã®æ§æã¯ãå®å
šã«äžè¬çãªJSç°å¢ã
äž»ã«ã䜿çšãµã€ãã§ããããã£ã®ã«ãã¯ã¢ããæ¹æ³ãç¹å®ããå¿ èŠãããããã§ããããã¯ãåå«ã¯ã©ã¹ãç¥å ã®ãã©ã€ããŒãããããã£ã«ã€ããŠãç¥ããå¿ èŠãªãã«åããã©ã€ããŒãåãåå©çšã§ããããã«ãç°ãªãã«ãã¯ã¢ããã¢ã«ãŽãªãºã ãå¿ èŠãªããã§ãã
JavaScriptãå éšã§ã©ã®ããã«æ©èœãããã«ã€ããŠãã£ãšç¥ãããã§ãã ãããšããã§èª¬æãããŠããããã«æ©èœãããšæããŸããããæããã«ããã§ã¯ãããŸããã ãããããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžãããšã¯ãŸã ä¿¡ããããã§ãããæ¯èŒã§ããæ°åã¯ãããŸããã
ãã®æ§æã¯ãŸã éããšæããŸããïŒ
åºæ¬çã«ã¯ããã§ãã ããã«ãJavaScriptæ§æã®æ®ãã®éšåãšççŸããŠããã ãã§ãªããä»ã®å€ãã®èšèªãšãççŸããŠããããšãããããŸããã
| èšèª| æ§æ| ããŒã|
| --- | --- | --- |
| CïŒ| private int x; | |
| C ++ | ãã©ã€ããŒãïŒ
int x; | |
| Java | private int x; | |
| PHP | ãã©ã€ããŒã$ x; | |
| Python | __x | ãã³ã¡ã³ããªãã|
| ã«ããŒ| ãã©ã€ããŒã
defã¡ãœãã
ïŒ..ã
çµäº| ããã¯ã¡ãœããã§ããããã£ãŒã«ãã¯ãã©ã€ããŒãã§ã
ããã©ã«ãã§ã¯ç§ã¯æããŸãã |
| TypeScript | ãã©ã€ããŒãx; | |
| Visual Basic | ãã©ã€ããŒãxAs Integer | |
äžèšã®èšèªã®_one_ãé€ããã¹ãŠãprivate
ããŒã¯ãŒãã䜿çšããŠãããPythonã«ã¯å®éã«ã¯ãé©åãªããã©ã€ããŒãç¶æ
ããªãããã§ãã
Pythonãé€ããŠïŒåã³ïŒãã©ã®èšèªããã£ãŒã«ã宣èšãŸãã¯ãã£ãŒã«ãã¢ã¯ã»ã¹ãå¯èŠæ§ã«å¿ããŠç°ãªãæ¹æ³ã§ãã©ãŒãããããããšã¯ãªããå¿ èŠã«å¿ããŠãã¹ãŠæ°ããå¯èŠæ§ä¿®é£Ÿåã䜿çšã§ããŸãã
ãŸãã #
ãš@
ã©ã¡ããããã³ã¬ãŒã¿ã®ãããªãã®ãã€ãŸãïŒã±ãã³ã®èšèã§ã¯ïŒãåœä»€åãããŒã®æ§æçã«ãå€åŽããã«é©ããŠãããšæããŠããŸãã
JavaScriptã®ããã«äžè¬çãªè©äŸ¡ããµããŒãããªãããããè¡ãè¯ãæ¹æ³ãããããŸãã
ãã®åé¡ãçŽ äººã®èšèã§èª¬æããããšã¯å¯èœã§ããããïŒ ïŒå€åhttps://github.com/tc39/proposal-private-fields/issues/14ã«ãããŸãïŒ
åç §ãããã®ãããããã«ããããã®åé¡ã®ãªã¹ããšäŸã1ãæã«ãŸãšããŠãããšäŸ¿å©ã§ãã
ãããããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžãããšã¯ãŸã ä¿¡ããããã§ãããæ¯èŒã§ããæ°åã¯ãããŸããã
TypeScriptã®ãããªæ £äŸã§ã¯ãªããæ¬åœã«ãã©ã€ããŒãã«ãããå Žåã¯ãããããŸãã JavaScriptã§ããããã£ãæ€çŽ¢ãããšãã¯ãã€ã§ããããã»ã¹ã¯åºæ¬çã«æ¬¡ã®ããã«ãªããŸãã
undefined
è¿ãããæžã蟌ã¿ãè¡ããŸããå°å°ãŸãã¯åçµãããŠããªãå Žåã¯ãå€ãç¬èªã®ããããã£ãšããŠèšå®ããŸããååã«ãã¿ãŒã³ããªããã©ã€ããŒãã䜿çšãããšãç¬èªã®ããããã£ããªããªãããããã¿ã€ããã§ãŒã³ãäžãããªãç¬èªã®ãã©ã€ããŒãããããã£ã®ãããªãã®ãã§ããŸãã 次ã«ãã©ã¡ããåç §ãããŠãããããããªãããããã©ã€ããŒãããããã£ã«ã¢ã¯ã»ã¹ã§ããå¯èœæ§ã®ãããã¹ãŠã®æäœã«ã€ããŠãããã§ããããæ¢ãå¿ èŠããããŸãã éåžžã®æ¹æ³ã§æ€çŽ¢ãããããèŠã€ãããªãå Žåã«ã®ã¿ãã©ã€ããŒãã§æ€çŽ¢ããããšã¯éåžžã«å±éºã§ãããããã¿ã€ããã§ãŒã³ã§äœããèŠã€ãããããã©ã€ããŒãããŒãžã§ã³ãããå Žåã¯ã©ããªãã§ããããã
æ倧ã®èª²é¡ã¯ãJavaScriptã¯ã©ã¹ããŸã å°ã誀ã£ãå称ã§ãããšããããšã§ãã ãããã¯æ¬è³ªçã«ãå žåçãªç¶æ¿ã³ã³ã¹ãã©ã¯ã¿ãŒé¢æ°ã®æ§æç³è¡£ã§ãã ç§ãæãã€ããèãã1ã€ããããããtc39 / proposal-private-fieldsïŒ14ã«è¿œå ããããšæããŸãã
ãã®åé¡ãçŽ äººã®èšèã§èª¬æããããšã¯å¯èœã§ããããïŒ
é話ãµã€ããæžãçŽãå¿ èŠãããå Žåã¯ã次ã®ãããªãµããŒãã¯ã§ããŸããã
class Foo {
private foobar: string;
baz() {
const p = 'foo' + 'bar';
console.log(this[p]);
}
}
ãŸãã¯ãæ§é äœã®ãããªeval
䜿çšæ³ã ãã©ã€ããŒãã®ã€ã³ããã¯ã¹ã¢ã¯ã»ã¹ãè©äŸ¡ãµããŒããªããªã©ããµããŒãããªãããšãéžæã§ããŸãããããªããããããããããšãã§ããŸãã ããã®ææ¡ã§ã¯ããããã®ã»ãšãã©ãã¹ãŠãäœããã®åœ¢ã§ææãããŠããŸãããããã§ã人ã
ã¯ãç§ã¯ãã©ã€ããŒãã奜ãã§ããðã
ããªãã¯èªåã®è²¡ç£ãæã£ãŠããªãã§ããããããªãã¯èªåã®ç§æ財ç£ã®ãããªãã®ãæã£ãŠããã§ããã
èšè¿°åã«visibility
ã¢ã€ãã ãå«ãåäžã®ããããã£ã®ã»ãããããå Žåãåé¡ã¯ãããããã£ãçŸåšã®ãªããžã§ã¯ãã«ååšããªãå Žåãæé ãããã©ãããããããªãããšã ãšæããŸãããããã¿ã€ããã§ãŒã³ã
é話ãµã€ããæžãçŽãå¿ èŠãããå Žåã¯ã...ã®ãããªãã®ããµããŒãããããšã¯ã§ããŸããã
AFAIKãããã¯ãšã«ãããµããŒããããŸããïŒ ref ïŒã
ç§ã¯ãŸã å®éã«ã¯è©äŸ¡ã®ã±ãŒã¹ã«åŸããªãã ããããã£åãèšç®ãããåŸãå®è¡æã«ããããã£ãã§ãã¯ãè¡ããããšæããŸããã
ã§ã人ã ã¯ãŸã ãã§ãç§ã¯ãã©ã€ããŒãã奜ããã§ã
ç§ã¯ãããã®äººã ã®äžäººã«ãªããªãããã«ããããŠåé¡ãç解ããããšããŠããŸãããææ¡ãããæ§æã¯ç§ãäžå¿«ã«ãããŸãã =ïŒ
ããŠãç§ã¯ä»ãeval / rewriteã®ã±ãŒã¹ãç解ããŠãããšæããŸãã ã¯ã©ã¹å ã®äœ¿çšãµã€ãã¯ã宣èšãããããããã£ã«åºã¥ããŠå¯èŠæ§ã瀺ãããã«æžãçŽãããŸããããã¯ãåçŽãªã«ãã¯ã¢ããã§ãªãéãäžå¯èœã§ãã
èšè¿°åã«å¯èŠæ§ã¢ã€ãã ãå«ãåäžã®ããããã£ã»ãããããå Žåãåé¡ã¯ãããããã£ãçŸåšã®ãªããžã§ã¯ãã«ååšããªãå Žåããããã¿ã€ããã§ãŒã³ãææ Œãããã©ãããããããªãããšã ãšæããŸãã
ããŒãã ãããããããçŸåšã®ã¯ã©ã¹ã«ååšããªãå Žåãããã¯å®çŸ©äžéãã©ã€ããŒãã§ã¯ãããŸãããïŒ ãããããªãããšã«ãããããã¿ã€ããã§ãŒã³ãäžã«ç§»åããå¿
èŠããããŸãïŒéåžžã®ãããªãã¯ããããã£ã«ãã¯ã¢ãããšåæ§ïŒã private
ã¢ã¯ã»ã¹ã®ããã®è¿œå ã®äœæ¥ã¯ãããŸããã
ïŒç§ã¯ããããæãããªäœããèŠéããŠããŸãïŒ
ãããããããçŸåšã®ã¯ã©ã¹ã«ååšããªãå Žåãããã¯å®çŸ©äžéãã©ã€ããŒãã§ã¯ãããŸãããïŒ ãããããªãããšã«ãããããã¿ã€ããã§ãŒã³ãäžã«ç§»åããå¿ èŠããããŸãïŒéåžžã®ãããªãã¯ããããã£ã«ãã¯ã¢ãããšåæ§ïŒã
ããããããªãã¯äžæããããããŸããã ãã©ã€ããŒãã©ãã«ã¯ç¶æ¿ãããããµãã¯ã©ã¹ã¯ãã¹ãã³ã°/ååã®è¡çªãå¿é ããããšãªããã©ã€ããŒããåå©çšã§ããŸãã
@ glen-84ããªããèšåãããããã®æçš¿ã¯äž¡æ¹ãšããå°ç« ã®ãªãç§çç¶æ ã®åé¡ã瀺ããŠããŸãã ãããã®åé¡ã®è§£æ±ºçã«ã€ããŠã®ã¢ã€ãã¢ã¯ãããŸããïŒ ã«ãã¯ã¢ãããã§ãŒã³ãè€éã«ããããšã¯ãäºææ§ã®é¢ã§ãªã¹ã¯ããããJavaScriptãåªããããã©ãŒãã³ã¹ã§å®è£ ããã®ãé£ãããªãïŒæ¢åã®ããã°ã©ã ãé ããªãå¯èœæ§ããããŸãïŒããããã·ãšäºä¹ããããšã¯åºæ¬çã«äžå¯èœã§ãããäžè¬ã«ãèšèªã®ã¡ã³ã¿ã«ã¢ãã«ãå€§å¹ ã«è€éã«ããŸãïŒãã§ã«æ¯èŒçè€éãªãªããžã§ã¯ãã·ã¹ãã ããããŸãïŒã
èšèªéã®æ¯èŒã§ã¯ãRubyã«ã€ããŠèšåããŠããŸãã Rubyã¯ç§çãªç¶æ
ã®è¯ãäŸã ãšæããŸã_with_ a sigil-- @
ã å°ç« ãªãã§getterã¡ãœãããšsetterã¡ãœãããåŒã³åºãããšãã§ããŸãã
ããããããªãã¯äžæããããããŸããã ãã©ã€ããŒãã©ãã«ã¯ç¶æ¿ãããããµãã¯ã©ã¹ã¯ãã¹ãã³ã°/ååã®è¡çªãå¿é ããããšãªããã©ã€ããŒããåå©çšã§ããŸãã
ããããã£ãçŸåšã®ã¯ã©ã¹ã«ãªãå Žåã¯ããããªãã¯ãŸãã¯ä¿è·ãããããããã£ãæ¢ãããã«äžã«ç§»åããããšãæå³ããŸããã
ããªããèšåãããããã®æçš¿ã¯äž¡æ¹ãšããå°ç« ã®ãªãç§çç¶æ ã®åé¡ã瀺ããŠããŸãã ãããã®åé¡ã®è§£æ±ºçã«ã€ããŠã®ã¢ã€ãã¢ã¯ãããŸããïŒ
JavaScriptã®å éšåäœãç解ããŠããªã人ãšããŠããããè¡ãã®ã¯éåžžã«å°é£ã§ãã
You'd have to somehow encode a "private key" into each lexical environment.
ãããäœãæå³ããã®ãããããŸããã ããã¯ãªãã®ããã§ããïŒ ã§ããŸãããïŒ
You'd have to change the semantics of each and every property access (because any property access might result in a private field). Engines are highly optimized around the current property lookup semantics.
é«åºŠã«æé©åãããŠãããããå¯èŠæ§ã1ååãæ¿ããã ãã§ãããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ããããŸããïŒ
Would for-in enumerate over these properties?
æè次第ã ãšæããŸãã åãã¯ã©ã¹å
ã§ãã¯ãã ãã ããããã¯private
ã䜿çšããªãçç±ã§ã¯ãªããå®è£
ã®è©³çŽ°ã§ãããä»ã®èšèªã¯ãããããã§ã«ãã®ãããªè³ªåã«çããŠããŸãã
Can someone shadow a private property with a normal property lower on the prototype chain? What about the reverse?
ãããããæåã®è³ªåã«ã¯ãã¯ããïŒå¯èŠæ§ãåäžïŒã§ããã2çªç®ã®è³ªåã«ã¯ãããããã§ãã ç¹°ãè¿ããŸãããããã¯ãã¹ãŠä»¥åã«è¡ãããããšããããŸããã
How do you prevent leaking the names of private fields to clients that shouldn't know that information? This is probably a fatal information leak.
å¯èŠæ§ã¯ããããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ãã«ãã»ã«åããŠå®çŸ©ããããã®åãªãããŒã«ã§ãã éçºè ã®99ïŒ ã¯ããããããæ å ±æŒããããæ°ã«ããªãã§ãããã ããã¯èšã£ãŠããç§ã¯ããã§2ã€ã®å¥ã ã®æ©èœãææ¡ã
All of this runtime stuff is going to be terrible for performance
ããã©ãŒãã³ã¹ãå¿ èŠãªå Žåã¯ããé衚瀺/ã»ãã¥ã¢ç¶æ ãã䜿çšããŠãã ããã ïŒDçé¢ç®ãªè©±ã§ãããã©ã®ãããªçš®é¡ã®ããã©ãŒãã³ã¹ã®äœäžã«ã€ããŠè©±ããŠããã®ã§ããããã å€å誰ãããããã¿ã€ããäœãããšãã§ããŸãã =ïŒ
Also, we couldn't use such a solution to self-host the built-ins
ã»ã«ããã¹ãã£ã³ã°ãã«ãã€ã³ïŒãããäœãæå³ããã®ãããç解ããŠããã°ïŒã¯æ¬åœã«ããã©ãŒãã³ã¹ã«æªãã®ã§ã¯ãªãã§ããããïŒ ããã§ãªãå Žåã¯...ãé衚瀺/ã»ãã¥ã¢ç¶æ ãã䜿çšããé«ã¬ãã«ã®ãã©ã€ããŒã/ä¿è·ãããå¯èŠæ§ã¯äœ¿çšããªãã§ãã ããã
ã«ãã¯ã¢ãããã§ãŒã³ãè€éã«ããããšã¯ãäºææ§ã«é¢ããŠãªã¹ã¯ããããšæããŸã
ç§ã¯ããããã©ã®ããã«æ©èœããã/æ©èœããå¯èœæ§ãããããèããæåã®/å¯äžã®äººã§ã¯ãããŸããã ããããã£ã«ã¢ã¯ã»ã¹ãããšãèšè¿°åã§å¯èŠæ§ã確èªãããããã«å¿ããŠå¿çããŸãã JSã§å®éã«ã©ã®ããã«æ©èœããããããããªããŠããè€éã«æããŸããã ç§ã¯æ¬åœã«JSå éš/ããããã£ã«ãã¯ã¢ããã¢ã«ãŽãªãºã ã®ã¯ã©ãã·ã¥ã³ãŒã¹ãèªãå¿ èŠããããŸãã = P
Rubyã¯å°ç« ã®ããç§çãªç¶æ ã®è¯ãäŸã ãšæããŸã-@
Rubyã¯Cãã¡ããªãŒèšèªã§ãããªãããããªãã¯ãã£ãŒã«ãã¯ãªãããã§ãããã²ãã¿ãŒãšã»ãã¿ãŒïŒã¢ã¯ã»ãµãŒïŒã ãã§ãã çŸåšã®ç§çç¶æ ã®ææ¡ã«ã¯ãåãæ±çšïŒããããã£ã®å®£èšïŒã§è€æ°ã®å®£èšã䞊ãã§ããŸãããæ§æã¯æããã«ç°ãªããäžè²«æ§ããããŸããã
ãšã¯ãããç§ã¯ããã§ã¯æ·±é ã§ããã䟡å€ããããã€ãºãè¿œå ããŠããå¯èœæ§ãé«ãã®ã§ãéãã«ããŠå°é家ã®åæã«éããããã«ããŸãã
ãã®é¡ããTC39ãšè©±ãåãããã¬ãã£ãã¯ã¹ãåé¿ããæ¹æ³ã«ã€ããŠä»ã®ã¢ã€ãã¢ãæãä»ãããšãã§ãããã©ããã確èªããŸãã å人çã«ã¯æã£ãŠããŸããã TypeScriptããã©ã€ããŒããã£ãŒã«ããå®è£ ããããšã決å®ããå Žåããããã¯ãŸã TC39ã®ã¹ããŒãž1ã«ãããããå€æŽãããå¯èœæ§ãããããšã«æ³šæããŠãã ããã
TypeScriptããŒã ã¯ãæ§æãšèšå·/æåãã¬ãã£ãã¯ã¹ã®äœ¿çšã«ã€ããŠã©ãæããŸããïŒ
å人çã«ã¯ã²ã©ãæãã ãšæããŸã...
æããã#
æ§æãåãé€ãããã®ææ¡ãã
@ shelby3æ®å¿µãªãããç§ã¯ãããçŸå®çãªéžæè¢ãšã¯èããŠããŸããã tl; drããã¹ãŠãeval
ãšã©ã®ããã«çžäºäœçšããããå¿é
ããå¿
èŠããããŸã; å°ç« ãå«ããªããšããã¹ãŠããåçãããŠãæ£ããæ©èœããªããªããŸãã
@littledanç§ã¯ä»ãããã§ãã©ããŒã¢ãããã䜿çšã«å察ããç§ã®æã匷ãè°è«ãšã TypeScriptãšã®äºææ§ã
@isiahmeadows
ããã¯ãçŸåšã®ç䌌ãã©ã€ããŒãå®è£ ã«ã»ãšãã©åã£ãŠä»£ãããŸã[...]ãŸããææ¡ã®æãéèŠãªéšåã¯ããã©ã€ããŒãããããã£ãã¯ã©ã¹èªäœã®äžã§ã®ã¿å©çšå¯èœã§ãããšããããšã§ãã
ç䌌ãã©ã€ããŒãå®è£
ã«åã£ãŠä»£ãããªãããšãé¡ã£ãŠããŸãã ã¯ã©ã¹å
ã§ã®å¯çšæ§ã ãã¯å®éã«ã¯ããã»ã©è¯ãããšã§ã¯ãªããšæããŸãïŒå¯çšæ§ãšã¯ã¢ã¯ã»ã·ããªãã£ãæå³ãprivate
ã¯å®éã«ã¯JavaScriptã§ã¯ããã»ã©ãã©ã€ããŒãã§ã¯ãããŸããã ããããã»ãã¥ãªãã£äžã®çç±ã¯å¥ãšããŠãç§ã®æèŠã§ã¯ãã»ãšãã©ã®éçºè
ã¯ãã»ãšãã©ã®å Žåãå¥çŽãå®çŸ©ããããã ãã«private
ã䜿çšããã¢ã¯ã»ã·ããªãã£ãå¶åŸ¡ããããã«ã¯äœ¿çšããªãã§ãã ããã
ããšãã°ã建ç¯å®¶ã®èŠ³ç¹ãããTS private
ããŒã¯ãŒããšãã®ç䌌ãã©ã€ããŒããªæ§è³ªã«ã€ããŠéåžžã«è¯ãããšã¯
å®è¡æã®ãã©ã€ããŒãããããã£ã®ã¢ã¯ã»ã·ããªãã£ã¯ããã¹ã察象ã®ã¯ã©ã¹ã«ãã©ã€ããŒããã£ãŒã«ããèšå®ããã ãã§ãã©ã€ããŒãç¶æ
ãæ¿å
¥ã§ãããããany
ãã£ã¹ãã®ä»£ããã«ãã©ã±ããè¡šèšã䜿çšããããšããå§ãããŸãããªãã¡ã¯ã¿ãªã³ã°ãµããŒãïŒãäŸïŒ
let instance: ClassUnderTest = new ClassUnderTest();
instance["_privateField"] = "My injected state";
ç¹å®ã®ïŒãã©ã€ããŒãïŒç¶æ
ã®ã¯ã©ã¹ãèšå®ããããã ãã«è€éãªãã¹ãã³ãŒããäœæããå¿
èŠã¯ãããŸããã
ç䌌ãã©ã€ããŒãããããã£ã®ãã1ã€ã®å©ç¹ã¯ãã¢ã³ããŒãããã«äžå¯æ¬ ãªããšã§ãã
@ about- codehttpsïŒ//github.com/tc39/proposal-private-fields/issues/33ãåç §ããŠ
TypeScriptã³ãã¥ããã£ããã¹ãŠã®private variable
è¡ãprivate #variable
åãã§å€æŽãããšã¯æããªãã
TypeScriptã®èŠ³ç¹ãããç§ãã¡ã®ã»ãšãã©ã¯ãåªããèšèªïŒã€ã³ããªã»ã³ã¹ããã«ãæãšã©ãŒãã¿ã€ããããŸããŸãªç³ïŒã®çŽ æµã§çãå¹»æ³ã«æºè¶³ããŠããŸãã ãããã®å¹»æ³ã¯ç§ãã¡ã«ããè¯ãéçºäœéšãäžããç§ãã¡ã¯ããè¯ãã³ãŒããããéãæžããŸãã ããããESNextãã©ã³ã¹ãã€ã«ä»¥å€ã«TSã䜿çšããäž»ãªçç±ã§ãããåŸè ã®å Žåã¯BabelãããããããåªããŠããŸãïŒãŸãã¯ãå°ãªããšãæåŸã«ãã§ãã¯ãããšãã®æ¹ãåªããŠããŸããïŒã
ç§ã¯ããœãŒã¹ãã¡ã€ã«ã®æ§æç³è¡£æ§æããããã©ã€ããŒãå€æ°ããå®éã«äœããæ±ããŠããå°æ°ã®äººã ã«ã€ããŠè©±ããŠããã®ã§ã¯ãããŸããã ç§ã¯ãããã®äººããããããã€ãã£ãã³ãŒãã«è¿ãããã匷åãªäœããå¿ èŠãšããŠãããšæããŸãã
ããããæ®ãã®ç§ãã¡ã®ããã«ïŒç§ãã¡ã¯æ¬åœã«JSãã©ã€ããŒããå¿
èŠãšããŸããã C ++ãJavaãCïŒãªã©ã§äœ¿çšããã®ãšåãããã«ãã·ã³ãã«ã§ç°¡åãªprivate convenient
å€æ°ãå¿
èŠã§ãã
ç§ãã¡ã«ãšã£ãŠèŠçã§ã¯ãªã解決çã«æ祚ããŠãã ããã ãã¶ããœãããã©ã€ããŒãïŒ å°ç« ããã©ã€ããŒã#variable
ããã®ã§ã¯ãªãããšæãããã§ãã ãããšããTS private
ãšESãã©ã€ããŒãã¯ç°ãªãæŠå¿µã§ããããïŒ ã¶ããããªã
@igabesz
TypeScriptã³ãã¥ããã£ããã¹ãŠã®
private variable
è¡ãprivate #variable
åãã§å€æŽãããšã¯æããªã
å®éããã®ææ¡ã§ã¯ã private
ã¯äžèŠã§ãã 代ããã«ã #
å°ç« ãã競åããããšãªãå®å
šã«çœ®ãæããããŸãã
ããããæ®ãã®ç§ãã¡ã®ããã«ïŒç§ãã¡ã¯æ¬åœã«JSãã©ã€ããŒããå¿ èŠãšããŸããã C ++ãJavaãCïŒãªã©ã§äœ¿çšããã®ãšåãããã«ãã·ã³ãã«ã§ç°¡åãªãã©ã€ããŒãã®äŸ¿å©ãªå€æ°ãå¿ èŠã§ãã
TypeScriptã®ãã©ã€ããŒãã¯ãã»ãšãã©ã®ãªããžã§ã¯ãæåèšèªãšåæ§ã«ããœãããã©ã€ããŒãã§ãã Javaã®ãã©ã€ããŒãå€æ°ã§ããããšã¹ã±ãŒããããã§ã¢ã¯ã»ã¹ã§ãããããæè¡çã«ã¯ãœãããã©ã€ããŒãã§ãã JS privateã¯ã this
ã€ã³ã¹ã¿ã³ã¹ã®ãã©ã€ããŒãç¶æ
ã«åŒãç¶ãã¢ã¯ã»ã¹ã§ããããšãé€ããŠãã¯ããŒãžã£ã䜿çšããã®ãšåãã§ãã
ç§ãã¡ã«ãšã£ãŠèŠçã§ã¯ãªã解決çã«æ祚ããŠãã ããã ãã¶ããœãããã©ã€ããŒãïŒ å°ç« ã®ãã©ã€ããŒã#variableãå¿ èŠã ãšã¯æããªãããã§ãã ãããšããTSãã©ã€ããŒããšESãã©ã€ããŒãã¯ç°ãªãæŠå¿µã§ããããïŒ ã¶ããããªã
ãããã¯ç°ãªãæŠå¿µã«ãªããŸãããäžè¬ã«ããšã¹ã±ãŒãããããå®éã«åœ¹ç«ã€ããšã¯ãã£ãã«ãããŸããã äž»ãªäŸå€ã¯ãªããžã§ã¯ãæ€æ»ïŒéçºè
ããŒã«ãNode.js util.inspect
ïŒã§ãããã»ãšãã©ã¯ãã¹ãå®çŸ©ã§ããããã§ã«ç¹æš©ãã€ãã£ãAPIã䜿çšããŠãããããä»æ§ã«è¿œå ããå¿
èŠã¯ãããŸããã
ããã«ãESããã©ã€ããŒãç¶æ
ãæšæºåãããšãTSã¯ãããæ¡çšãã次ã®ã¡ãžã£ãŒããŒãžã§ã³ã§åé€ãããç¬èªã®ãœãããã©ã€ããŒãã¡ã«ããºã ãå»æ¢ããå¯èœæ§ããããŸãã ããã¯åžžã«ESã®å³å¯ãªã¹ãŒããŒã»ããã§ãããESèªäœãé²åããã«ã€ããŠãå¿
èŠã«å¿ããŠæ©èœãè¿œå ïŒéåæé¢æ°ïŒãå€æŽïŒã¯ã©ã¹ïŒãããã³/ãŸãã¯éæšå¥šïŒ /// <amd-dependency />
ïŒããŠãããèªäœãå³å¯ãªãã®ãšããŠç¶æããŸããã¹ãŒããŒã»ããã§ãããçŸåšã®ä»æ§ãè€è£œããŸããã
ããã«ãESããã©ã€ããŒãç¶æ ãæšæºåãããšãTSã¯ãããæ¡çšãã次ã®ã¡ãžã£ãŒããŒãžã§ã³ã§åé€ãããç¬èªã®ãœãããã©ã€ããŒãã¡ã«ããºã ãå»æ¢ããå¯èœæ§ããããŸãã
ð
ããã«ãESããã©ã€ããŒãç¶æ ãæšæºåãããšãTSã¯ãããæ¡çšãã次ã®ã¡ãžã£ãŒããŒãžã§ã³ã§åé€ãããç¬èªã®ãœãããã©ã€ããŒãã¡ã«ããºã ãå»æ¢ããå¯èœæ§ããããŸãã
ããã¯TSããŒã ã®ç«å Žã§ã¯ãããŸããã è¿ããã¡ã«å»æ¢ããäºå®ã¯ãããŸããã
ãã©ã€ããŒãç¶æ
ã®ææ¡ãæ£ããç¶æ
ã«éããå ŽåãTSã¯ãããå®è£
ããŸãã TSãä»æ¥ããããå®è£
ããŠããã®ã§ãããããã©ã€ããŒãã«åœ±é¿ãäžãããšã¯æããªãã
@mhegazyããããŸããã ç§ã¯æ£çŽã«ç«ã£ãŠããŸãã ïŒããã¯ç¥èã«åºã¥ããæšæž¬ã§ããããšããã§ãïŒ
Class Fields Proposalã¯çŸåšã¹ããŒãž2ã«ããã®ã§ãTypeScriptããŒã ããããæ€èšããEcmaScriptæšæºã«åŸãæºåãã§ããŠããããã§ãð¯
ãã©ã€ããŒãç¶æ ã®ææ¡ãæ£ããç¶æ ã«éããå ŽåãTSã¯ãããå®è£ ããŸãã
@mhegazyã¹ããŒãž3ãå®è£ ããã®ã«é©åãªææã§ããïŒ
ç·šéïŒç§ã¯ç§ã®çããèŠã€ãããããããŸããð
@styfleã¯ãå®è£ ã«é¢ããçŸåšã®èæ ®äºé ã«ã€ããŠèª¬æããŠããèšèšäŒè°ããŒãïŒïŒ16415ïŒã®èª¬æãåç §ããŠãã ããã
ã¹ããŒãž3ã¯å®è£ ããã®ã«é©åãªææã§ããïŒ
ã¯ãã ãã®æ©èœã§å¯èœãªããŸããŸãªèšèšã®èª¿æ»ãéå§ããŠããŸãã
ã¯ã©ã¹ãã£ãŒã«ãã®ææ¡ã¯çŸåšã¹ããŒãž3ã«ãããŸãã ïŒ1ãæåã®æç¹ã§ïŒ
ã¯ã©ã¹ãã£ãŒã«ãã®ææ¡ã¯çŸåšã¹ããŒãž3ã«ãããŸãã ïŒ1ãæåã®æç¹ã§ïŒ
ã¯ã©ã¹ãã£ãŒã«ããã¹ããŒãž3ã«å°éããéããã©ã€ããŒãã¡ãœãããšã¢ã¯ã»ãµãŒã¯ããããç¶ããã¹ããŒãž2ã«ãããæšæ¥ã¹ããŒãž3ã«ç§»åããŸãããã¯ã©ã¹ã®ãã©ã€ããŒãã¡ã³ããŒã«å¯ŸåŠããããã«å¿ èŠãªãã®ã¯ãã¹ãŠã¹ããŒãž3ã«ãããŸãã
ãã°ããã®éã¹ããŒãž3ã«ãªã£ãŠããã®ã§ã #[field]
æ§æã®æ¡çšã«é¢ããTSããŒã ã®ç«å Ž/é²æç¶æ³ã«é¢ããæŽæ°ã¯ãããŸããïŒ å人çã«ç§ã¯ãããæ¬åœã«å«ãã§ãTSã®æ¢åã®private
ããŒã¯ãŒãã倧ãã«å¥œã¿ãŸãããåæã«å¯èœãªéãæšæºã«è¿ã¥ããããšæã£ãŠããŸãã
å人çã«ç§ã¯ãããæ¬åœã«å«ãã§ãTSã®æ¢åã®ãã©ã€ããŒãããŒã¯ãŒãã倧ãã«å¥œã¿ãŸã
ç§ããããã¯ãšãŠãéãã§ã
ãããã @ mhegazyç§ã¯ãããïŒè©ŠããŠïŒããããã®ã§ãããç§ã¯ã§ããŸããïŒ
解æã¯æªããªãã¯ãã§ããïŒã»ãšãã©ããŒã¯ã³ã§ããã»ãšãã©æ°ãã修食åïŒãã¿ã€ããã§ãã¯ã¯é¢åã§ãïŒäœããã®æ¹æ³ã§æ¯èŒããå¿ èŠããã2çš®é¡ã®ãã©ã€ããŒããããããïŒãããŠã³ã¬ãã«ã®æŸåºã¯ã²ã©ããã®ã§ãïŒå®éã®ã©ã³ã¿ã€ã ãã©ã€ãã·ãŒã®ããŠã³ã¬ããªã³ã°ã¯å€§ããªå€é©ã§ããããã ãã©ã€ããŒãã¹ã¿ãã£ãã¯ïŒããã³å Žåã«ãã£ãŠã¯ãã³ã¬ãŒã¿ïŒãé²æ©ãããŸã§ã¯ãŸã å°ãäžå®å šã§ãïŒãããããã¹ãŠã©ã®ããã«çžäºäœçšããããèãããšãäžåºŠã«ãã¹ãŠãè¿œå ããæ¹ãè¯ããããããŸããïŒã
èšããŸã§ããªããããã«ã¯ãããããããŸãã
@weswighamããããŸããããããããŸãð
ããã¯ãç§ïŒ @ Neuroboy23ãªã©ïŒããã©ã€ããŒããã£ãŒã«ãã®å®è£ ãå®éšããããšã«ãªããšãã
æŽæ°ïŒé²è¡äžã®äœæ¥ã¯ãã¡ãã§ãã
ã¯ãã ãã®æ©èœã§å¯èœãªããŸããŸãªèšèšã®èª¿æ»ãéå§ããŠããŸãã
#
æ§æã奜ãã§ã¯ãããŸãããããã®æ§æã®èåŸã«ããæè¡çãªçç±ã¯ç解ããŠããŸãã @mhegazyæ°ããææ¡ãå®è£
ããåŸãTypeScriptããŒã ãæ¬åœã«ããããããšã¯ãTypeScriptãnamespace
ã private
ãªã©ã®å»æ¢ãããå®è£
ã§äœãããã®ããèããããšã§ããåããŸãã¯ã»ãŒåãããšãè¡ãããã®ããè¯ães-standardã®æ¹æ³ãããããã§ã¯ãããŸããã
ãŸãã protected
ã«ã€ããŠæ°ã»ã³ãè¿œå ããããšæããŸãã ãã€ãprivate
ããŒã¯ãŒããåé€/éæšå¥šã«ããå ŽåïŒä»ã¯ããŸãããã°ïŒã protected
ããŒã¯ãŒãã§ãåãããšãããŠã倧äžå€«ã ãšæããŸãã ã»ãšãã©ã®äººãåæã§ããªãããšã¯ç¥ã£ãŠããŸãããããã§ããè¿œå ã®å¯èŠæ§ã¹ã³ãŒãã䟿å©ãªå ŽåããããŸãããå
šäœçãªäŸ¡å€ã¯ããã»ã©é«ããããŸããã
@pleerock ã
ããã¯ç§ãTypeScriptããèŠããšæåŸ ãããã®ã§ãïŒ
class Example {
private a = 1;
#b = 2;
}
EmitïŒESNextãã¿ãŒã²ããã«ããïŒïŒ
class Example {
a = 1;
#b = 2;
}
EmitïŒESNextãã¿ãŒã²ãããšããESãã©ã€ããŒããã£ãŒã«ããšããŠãã©ã€ããŒããšããŠããŒã¯ããããã£ãŒã«ããçºè¡ããæ°ããã³ã³ãã€ã©ãªãã·ã§ã³ã䜿çšïŒïŒ
class Example {
#a = 1;
#b = 2;
}
ããã¯äžäœäºææ§ããããã¯ãªãŒã³ãªæ§æã§ESãã©ã€ããŒããã£ãŒã«ãã䜿çšã§ããããã«ããå¿ èŠããããŸãã
@ glen-84ãã¡ããããã§ããããç§ã¯æ代é ãã®ããŒã¯ãŒããšæ§æã«é¢ããé·æèšç»ã«ã€ããŠè©±ããŠããŸãã
æ§æãããŒã¯ãŒããå»æ¢ããäºå®ã¯ãããŸããã
ãŸãã private
ã#
ã«ãã©ã³ã¹ãã€ã«ãããªãã·ã§ã³ã¯ãªããšæããŸããäºæ³ãããåäœã¯ç°ãªããŸãã #
ã¯ããŒãã©ã³ã¿ã€ã ãã©ã€ãã·ãŒã§ããã private
ã¯åãªãèšèšæã®ãã©ã€ãã·ãŒã§ãã
@weswighamç§ãããæããŸãã @RyanCavanaughããããã¯æåŸ ãããçãã§ããã ããããããã§ãç§ã¯ãæ°ãããŠãŒã¶ãŒãææ°ã®ecmascriptã®ææ¡ã§æ代é ãã«ãªã£ããããåå空é/ãã©ã€ããŒãããŒã¯ãŒãã®äœ¿çšãé¿ããããã«å°ãªããšãããã€ãã®æŠç¥ãé©çšããŸã
人ã
ã¯äžè¬çã«ãç§ãã¡ããã¡ããæŽæ°ããããã¥ã¡ã³ããèªãããšã«åºã¥ããŠãããç解ããŸãã module foo {
ã¯ãŸã èšèªã®ãŸãŸã§ããã namespace foo {
ããåã®éåžžã«å€ãã³ãŒãããŒã¹ãé€ããŠãåºæ¬çã«ã¯ãã¯ãå®éã«ã¯èŠãããŸããã
@RyanCavanaughãããèããŠ#
代ããã«privateã䜿ãå§ããã§ãããããããŠããã¯åå空éã®äŸããã倧èŠæš¡ã«ãªãåŸåããããŸã
ãŸãããã©ã€ããŒããïŒã«ãã©ã³ã¹ãã€ã«ãããªãã·ã§ã³ã¯ãªããšæããŸããäºæ³ãããåäœã¯ç°ãªããŸãã ïŒã¯ããŒãã©ã³ã¿ã€ã ãã©ã€ãã·ãŒã§ããããã©ã€ããŒãã¯èšèšæã®ãã©ã€ãã·ãŒã§ãã
ããŒã äžå¹žãªæ§æãé¿ããããã«ããªãã·ã§ã³ã§ããŒããã©ã€ãã·ãŒã«ãprivate
ã䜿çšã§ããããšãæãã§ããŸããã
ãšã«ãããç§ã®ïŒçŸåšã®ïŒãŠãŒã¹ã±ãŒã¹ã«ã¯ãããããœãããã©ã€ããŒãã§ååã§ãã
ãã®æ©èœã¯å·šå€§ã§ãããããŒãžã§ã³3ã¯äººã
ã«æ°ãã#
æ§æã䜿ãå§ããè¯ãæ©äŒã«èŠããã®ã§ãTypeScriptã®ä»åŸã®3ããŒãžã§ã³ã«ãã®æ§æãµããŒããå«ããã®ã¯çŽ æŽãããããšã ãšæããŸãã
ç·šéïŒãããŒããŒãžã§ã³3ããã§ã«ãªãªãŒã¹ãããŠããããšãå¿ããŸããã
åèãŸã§ã«ãTC39ããããŒã¶ã«ã®ã¬ãã«ã¯ãã©ã€ããŒããã£ãŒã«ã/ã¹ããããªã©ã«é¢ããæè¿ã®ãã£ãŒã³ãããã€ããããããçŸåšã®åœ¢åŒã®ããããŒã¶ã«ããããå®çŸãããã©ããããå®ãã§ã¯ãããŸããã ããã«ããã€ãã®é¢é£ããåé¡ããããŸãïŒ
ç§ã¯TC39ã§ã¯ãããŸããããçãããžã®å人çãªææ¡ã¯ãæåã«æ§æãåã³åºãŸãã®ãåŸ ã£ãŠããïŒããããã¹ããŒãž4ãåŸ ã£ãŠïŒããããå®è£ ããããšã§ãã
FWIW tc39 / proposal-class-fieldsïŒ100ã§ã®è°è«ã¯ãç¹ã«äœãã瀺ããã®ãšã¯è§£éããŸããã #
ã¯äžèŠãããã§ã¯ãããŸãããã奜ãŸããæ§æ圢åŒã¯ææ¡ãããŠãããã人ã
ãæãã§ãããšæãããå¯äžã®æ§æã¯æããã«æ©èœããŸããã ããçš®ã®ãã¬ãã£ãã¯ã¹ã·ãžã«ãå¿
èŠã§ããã this.someProp
ããã©ã€ããŒãã«ãããã¹ãŠã®è©Šã¿ã¯å€±æããéåœã«ãããŸãã
ç§ã¯ãããããªãåŠå®çã«èãããããšãç解ããŠããŸãããççŽã«èšã£ãŠãããç§ã®æå³ã§ã-ãããã®ã¹ã¬ããã®äžæºè ã®èª°ããçŸåããã¹ã¬ãããŸãã¯FAQã§æ±ãããã³ã¢æè¡çåé¡ã«ææ矩ã«é¢äžããŠããŸããã ãã®ã¬ãã®ã¹ã¬ãããèªã¿éããå°ç« ãå¿ èŠãªçç±ã®é·ãæ£ãã説æãèŠãã®ã¯æ°ã®ãããããã§ãã
ãšã³ãã²ãŒã ããããŒãã©ã³ã¿ã€ã ãã©ã€ãã·ãŒãæ¬åœã«å¿ èŠãšããªãéããããšã§ããå Žåãããã¯ããã©ãŒãã³ã¹ãšãããã°å¯èœæ§ã®èŠ³ç¹ããWebã«ãšã£ãŠããããè¯ãçµæã§ãã
ç§ã¯ãããããããèšåããã®ã«çæ³çãªåé¡ã§ã¯ãªãããšã«åæããŸãããä»ã®
tc39 / proposal-class-fieldsïŒ106ã¯ãããããã¯ããã«ææšçã§ã-ãããŸã
ãšããã匱ããããã代ããã«äœ¿çšããããšã«ã€ããŠã®çå£ãªè°è«ã
ãããã·çžäºéçšã¯æããã«ææªã§ãã
ã€ã·ã¢ã¡ããŠãº
[email protected]
www.isiahmeadows.com
15:38ææã2018幎7æ30æ¥ã«ã¯ãã©ã€ã¢ã³ã»ãã£ãããŒ[email protected]
æžããŸããïŒ
FWIWç§ã¯ã§ã®è°è«ã解éããŸãã
tc39 / proposal-class-fieldsïŒ100
https://github.com/tc39/proposal-class-fields/issues/100
ç¹ã«äœãã瀺ããŸãã ïŒæåã¯ãããã§ã¯ãããŸãããã
æãŸããæ§æ圢åŒã¯ææ¡ãããŠããããå¯äžã®æ§æã¯
人ã ãæãã§ããããã«èŠããã®ã¯æããã«å®è¡å¯èœã§ã¯ãããŸããã ãã¬ãã£ãã¯ã¹ãå¿ èŠã§ã
ããçš®ã®å°ç« ãšthis.somePropããã©ã€ããŒãã«ããããã®ãã¹ãŠã®è©Šã¿
倱æããéåœã«ãããŸããç§ã¯ãããããªãåŠå®çã«èãããããšãç解ããŠããŸãããççŽã«èšã£ãŠãããç§ã®æå³ã§ã-
ãããã®ã¹ã¬ããã®äžå¹³ãèšã人ã¯èª°ãæå³ã®ããããšã«é¢äžããŠããŸãã
çŸåããã¹ã¬ãããŸãã¯FAQã§å¯ŸåŠãããŠããäž»èŠãªæè¡çåé¡ã ããã¯
ãã®ã¬ãã®ã¹ã¬ãããèªã¿éããŠé·ãèŠãããã«äžäœãšããŠæ°ã®ããã
å°ç« ãå¿ èŠãªçç±ã®æ£ãã説æã¯ã
æ¥å°ããšã³ãã²ãŒã ããæ¬åœã«ãã©ã€ããŒããã£ãŒã«ãã䜿çšããªãéãã
ããŒãã©ã³ã¿ã€ã ãã©ã€ãã·ãŒãå¿ èŠã§ããããã¯ãããããŠã§ãã«ãšã£ãŠè¯ãçµæã§ã
ããã©ãŒãã³ã¹ãšãããã°å¯èœæ§ã®èŠ³ç¹ãããâ
ããªããèšåãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/9950#issuecomment-408984395 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AERrBGCphyQUu5lJQW7lgsqALLL3e0_Wks5uL2DLgaJpZM4JVDwV
ã
WeakMapsã®äœ¿çšã«ã€ããŠã¯ããã€ãã®è°è«ããããŸããããããProxyãšã®çžäºäœçšãã©ã®ããã«æ¹åãããã¯ããããŸããã ãã©ã€ããŒãã¯ã©ã¹ã®æ©èœãã©ã®ããã«æ©èœãããã«ã€ããŠå¥ã®ã¢ã€ãã¢ãæã£ãŠããTC39ã¡ã³ããŒãæåŸ ããŠããã£ãŒãããã¯ã®ããã«å§å¡äŒã«æ瀺ããŸãã çŸåšããã®ææ¡ã¯ã¹ããŒãž3ã«ãããçè«çã«ã¯å§å¡äŒã®ã³ã³ã»ã³ãµã¹ããžã·ã§ã³ãè¡šããŠããŸãã ä»ã®èšèšãå¯èœã§ãã£ãŠããå€ãã®äººã ããã®æ©èœãæå¹ã«ãããšããå ±éã®ç®æšãéæããããã«åŠ¥åããŸããã
ç§ã¯ããããã·ã䜿çšããŠãªããžã§ã¯ãã®å€æŽãç£èŠããæ¹æ³ãšãããããã©ã€ããŒããã£ãŒã«ããšã©ã®ããã«çžäºäœçšãããã«ã€ããŠããã¬ãŒã ã¯ãŒã¯éã®ãã£ã¹ã«ãã·ã§ã³ãæŽçããããã«åãçµãã§ããŸãã äŒè©±ã«åå ãããå Žåã¯ãç¥ãããã ããã
@RyanCavanaugh
FWIW tc39 / proposal-class-fieldsïŒ100ã§ã®è°è«ã¯ãç¹ã«äœãã瀺ããã®ãšã¯è§£éããŸããã
#
ã¯äžèŠãããã§ã¯ãããŸãããã奜ãŸããæ§æ圢åŒã¯ææ¡ãããŠãããã人ã ãæãã§ãããšæãããå¯äžã®æ§æã¯æããã«æ©èœããŸããã ããçš®ã®ãã¬ãã£ãã¯ã¹ã·ãžã«ãå¿ èŠã§ãããthis.someProp
ããã©ã€ããŒãã«ãããã¹ãŠã®è©Šã¿ã¯å€±æããéåœã«ãããŸãã
ããã«ã€ããŠã¯é
ããŠããŸãããå®éã«ã¯this->var
æ§æãææ¡ããææ¡ããã
確ãã«ããã®ææ¡ã¯ããããæ»ãã§ããŸãïŒãå§å¡äŒã¯ç±çããŠããªãã£ãããç§ãèŠã€ããå¯äžã®çç±ã§ãïŒã ããããå¥ã®æ§æãå®éã«ææ¡ãããŠããããã¹ãŠã®å©å®³é¢ä¿è ããããã«ç²ŸéããèªèããŠããããšãé¡ã£ãŠããŸãã
private
ãå®è¡æã«åŒ·å¶ãããããçš®ã®_soft_ãã©ã€ããŒãã«ãã©ã³ã¹ãã€ã«ããã³ã³ãã€ã©ãªãã·ã§ã³ããããšäŸ¿å©ã ãšæããŸãã çã®ããŒããã©ã€ããŒããå¿
èŠãšãããŠãŒã¹ã±ãŒã¹ã¯ç¹ã«äžè¬çã§ã¯ãªããšæããŸãããããã£ãŠã #
æ§æãå«ããªå Žåã§ããã»ãšãã©ã®äººã¯private
ã«åºå·ããåŸåããããšæããŸãã ãã ããã³ã³ãã€ã«æã®ã¿ã®ãã©ã€ããŒãã¯_too_ãœããIMOã§ãã ãŸãããã®ãããªãªãã·ã§ã³ã¯ããã©ã€ããŒãã®å¯èœãªããªã¢ã³ãã®æ°ãæžããã®ã«åœ¹ç«ã¡ãŸã...éçºè
ããããèªåã§å®è£
ããããšãä»»ãããŠããå Žåã¯ãããããã¹ãŠãæã€ããšãã§ããŸãïŒ
class Demo {
private a
#b
<strong i="9">@reflect</strong>
#c
}
ãããã£ãŠãæ°ãããªãã·ã§ã³ãæå¹ã«ãããšã private a
ã<strong i="13">@reflect</strong> #a
ã«ãã©ã³ã¹ãã€ã«ãããããšãææ¡ããŸããããã§ã @reflect
ã¯ãã³ãã¥ããã£ã§ãµããŒããããŠããAPIãä»ããŠããããã£ãåæ ã§ãããã³ã¬ãŒã¿ã§ãã æšæºã®ãã³ã¬ãŒã¿ã©ã€ãã©ãªã«ã€ããŠã®è©±ã@reflect
ãã³ã¬ãŒã¿ïŒãŸãã¯ç§ãã¡ããããšåŒã³ãããã®ïŒã¯å°æ¥æšæºåãããå¯èœæ§ããããŸãã ãã®ããã®è¯ãåè£ã«ãªããšæããŸãã
ç§ã®ææ¡ã®äž»ãªæ¬ ç¹ã¯ãããã©ãŒãã³ã¹ãžã®åœ±é¿ã ãšæããŸãã ãã€ã®æ¥ãJSã«ãããããæé©åããããã«ãã€ãã£ãã«å®è£
ãããæšæºã®ãã³ã¬ãŒã¿ãããã€ãããããšãæåŸ
ã§ããŸãããåœé¢ã®çŸå®ã¯ã <strong i="19">@reflect</strong> #x
ãåãªã#x
ãããé
ããªãããšã§ãã ããããç§ã¯ããããªãã·ã§ã³ãšããŠææ¡ããŠããã ãã§ãããããããããã©ã«ãã§ç¡å¹ã«ããå¿
èŠããããŸãïŒäžäœäºææ§ã®çç±ãããïŒã
@MichaelTheriot
ããã«ã€ããŠã¯é ããŠããŸãããå®éã«ã¯this-> varæ§æãææ¡ããææ¡ããããŸãã
確ãã«ããã®ææ¡ã¯ããããæ»ãã§ããŸãïŒãå§å¡äŒã¯ç±çããŠããªãã£ãããç§ãèŠã€ããå¯äžã®çç±ã§ãïŒ
å§å¡äŒã¯ãã¯ã©ã¹1.1ã®ææ¡ã§ã¯ãªããçŸåšã®ææ¡ãæ¿èªããããã®ååã«èæ ®ãããçç±ããããã瀺ããŠããŸããããšãã°ã
@mbrowne
ç§ã¯ãããéãããããããŸããã ã¯ã©ã¹1.1ã®åé¡ããŒãžã¯å幎ééã¢ã¯ãã£ãã§ãããããªãããªã³ã¯ããäŸã§ããç§ã®ã³ã¡ã³ãã®1ãæåŸã«æžãããŸããã
åèãŸã§ã«ãæ°ãæåã«ãªã³ã¯ããã¹ã¬ããã§ããã«ã€ããŠèšåããŸããã ããã§ã®ç§ã®ã³ã¡ã³ãã¯ã代æ¿æ§æãææ¡ãããŠããªããšãã誀解ã«å¯ŸåŠããããã ãã®ãã®ã§ãããé¢ä¿ãããã¹ãŠã®é¢ä¿è ã¯ããã§ã¯ãªãããšãèªèããŠããå¿ èŠãããããã§ãã
ç·šéïŒç§ã®ã³ã¡ã³ãã¯ãTypeScriptãäœãéãããšãããããšã瀺åããŠããŸããã ææ¡ã®åç §ãããåé¡ã«é¢ãã誀ã£ãæ å ±ãèšæ£ããããšã¯æçšã§ãããšç§ã¯ä¿¡ããŠããŸãã
@MichaelTheriot代æ¿æ¡ã®éç¥ãå¿ èŠãªåœäºè ã¯ããã®äŒè©±ã«é¢äžããåœäºè ã§ã¯ãããŸããã TypeScriptã¯ãæ¿èªãããäºå®ã®ææ¡ã«åŸããŸãã ç§ã®æèŠã§ã¯ã代æ¿æ§æãææ¡ãããæ¡çšãããŠããªããšããäºå®ã¯ããã®äŒè©±ã«ã¯ããŸã圹ç«ã¡ãŸããã
ããã¿ããªãããã圹ç«ã€å Žåã«åããŠãç§ã¯ã©ã³ã¿ã€ã ä¿è·/ãã©ã€ããŒãã¡ã³ããŒã®ç§èªèº«ã®å®è£ ãå ±æããããšæããŸãïŒ
lowclass
åç
§ããŠãã ããã
ã©ã³ã¿ã€ã ã®ãããªãã¯/ä¿è·/ãã©ã€ããŒãã¡ã³ããŒã®ããããçš®é¡ã®äœ¿çšæ³ã瀺ãåºç¯ãªãã¹ããã¡ã€ã«ã確èªããŠãã ããã å®è£ ã¯é·ãã¯ãªããæå°éã®ä¿è·/ãã©ã€ããŒãæ©èœã®ã¿ãæãããããã«äžéšã®æ©èœãçç¥ã§ããŸãã
ããŒãïŒ
super
ã§åäœããããES5ã®Super
ãã«ããŒã䜿çšããŸãïŒãã¹ããåç
§ïŒãconstructor
ã¡ãœããããµããŒãããŸãïŒãã¹ããåç
§ïŒãclass
ãæ¡åŒµããæ©èœïŒãã¹ããåç
§ïŒãclass
ã©ããããŠãä¿è·ããããã©ã€ããŒããªæ©èœãæäŸããŸãïŒãã¹ããåç
§ïŒãclass
esã®ä»£ããã«ES5ã¹ã¿ã€ã«ã®function
ã¯ã©ã¹ãèšè¿°ããŸãïŒãã¹ããåç
§ïŒããã¹ããå®è¡ããã«ã¯ïŒ
npm install
npm test
Babelã®å®è£ ã®è©³çŽ°ãšåé¡ã«ã€ããŠã¯ã httpsïŒ//github.com/babel/proposals/issues/12ããã³https://github.com/babel/babel/issues/8421ãåç §ããŠãã ããã
ã¿ãªãããããã«ã¡ã¯ã
ãŸã å®æããŠããªããã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã®ä»æ§ãå®è£ ããªãã§ãã ããã åé¡ããããŸãã
ãã®ã¹ã¬ããããèªã¿ãã ããã
ãããèªãã 人ã¯ãä»ã®æ§æã®ã¢ã€ãã¢ãèŠãŠïŒããèªãã§ãã ããããã£ãšãããŸãïŒãããªãã®æèŠãè¡šæããããšããå§ãããŸãã
feããã«å¥ã®ã¹ã¬ããããããŸãïŒçŸåšã®#
IMHOãããåªããæ§æã®ã¢ã€ãã¢ããããŸãïŒã
ãã§ã«ãããªãã¯/ãã©ã€ããŒã/ãããã¯ããåºã䜿çšããŠããJavaScriptã³ãã¥ããã£ãããå ŽåãJSãã©ã€ããŒã/ãããã¯ãã®æªæ¥ã圢äœãã®ã«åœ¹ç«ã€å€§ããªãã£ã³ã¹ãããã®ã¯TypeScriptã³ãã¥ããã£ã§ãã
ãã®ããããã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã¯V8v7.2ãšChrome72ã§åºè·ãããŠããŸãããã©ã€ããŒããã£ãŒã«ãã®ææ¡ã®å®è£ ãéå§ããäºå®ã¯ãããŸããïŒ
@ ChrisBrownie55ãããªãã¯ãã£ãŒã«ããåºè·ãããŠããŸãã ãã©ã€ããŒãã§ã¯ãããŸããã
@jhprattããã¯ç§ã®æªãããšã§ãããChromeããŒã ã¯è¿ãå°æ¥ãã©ã€ããŒãã§åºè·ããããšãèšç»ããŠããããã§ã
åèïŒ https ïŒ//v8.dev/blog/v8-release-72#public -class-fields
V8 7.2ã®æç¹ã§ãããªãã¯ã¯ã©ã¹ã®ãã£ãŒã«ããåºè·ããŠããããšãææžåããŠããŸããããã©ã€ããŒããã£ãŒã«ãã«é¢ããŠã¯ããããããŸãïŒç§ã®åŒ·èª¿ïŒïŒ
ãã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã®ãµããŒãã¯ãå°æ¥ã®V8ãªãªãŒã¹ã§èšç»ãããŠããŸãã
@isiahmeadowsç§ã¯å®éã«Googleã®éçºè ããã°ã®å¥ã®æçš¿ãåç §ããŠããŸããã
çµè«
ãããªãã¯ã¯ã©ã¹ãã£ãŒã«ãã¯V8v7.2ããã³Chrome72ã§åºè·ãããŸãããã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã¯ãŸããªãåºè·ãããäºå®
ãããã®èšäºã¯@mathiasbynensãšãŸããããããã®èšäºã¯ãå¿ èŠã«å¿ããŠèª¬æãæ±ããããšãã§ããŸãïŒãã ãããããã®æçš¿ã¯ããããããªãæ確ã ã£ããšæããŸãïŒã V8ã§ã®å®è£ ã®ä»äžãã«åãçµãã§ããcc @ gsathyaãš@joyeecheung ã
ãšã«ããã2019幎1æã®TC39äŒè°ã¯ãææ¡ã«é¢ããã³ã³ã»ã³ãµã¹ã®ããã«å¥ã®å確èªãšãšãã«ãç§çåéãšæ¹æ³ã®ææ¡ã®ä»£æ¿æ¡ãåèãã1幎åãç· ãããã£ãã çŸåšã®ããŒãžã§ã³ã¯å®å®ããŠããŠãTypeScriptã䜿çšããæºåãã§ããŠãããšèããããŸãã
Chromeã¯ãã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãããªãªãŒã¹ããŸããð
ãããã¯ãçŸåš_canary_ãã«ãã§ãªãªãŒã¹ãããŠããChrome74ã«ã®ã¿å«ãŸããŠããŸãã
Chrome74ã§ãã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ããåºè·ããŸããã ä»ããChromeã«ããªã¢ã§ãè©Šããã ããïŒ
âTwtiterçµç±ã®SathyaGunasekaran
ãã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã®ç¹å®ã®å®è£ ãéžæããïŒãŸãã¯å®è£ ããïŒããšã«ã€ããŠãç§ãã¡ãããã«ããå Žæãç¥ã£ãŠãã人ã¯ããŸããïŒ @trusktrãããŒã¯ã©ã¹ãæšå¥šããŠããã®ãèŠãŸããããã
æããã«ããã§ã¯ãããŸããã ãã©ã€ããŒããã£ãŒã«ãã¯ãããã¿ã€ããã§ãŒã³ãæ©ããŸããïŒä»ã®ãªããžã§ã¯ããããããèŠãããšãã§ããããããã©ã€ããŒãã§ã¯ãªãããïŒ
ãã©ã€ããŒããã£ãŒã«ãã¯WeakMapsã«ãã©ã³ã¹ãã€ã«ãããšæããŸãïŒBabelãšåãããã«ããã£ãŒã«ãããšã«1ã€ã®WeakMapïŒã #
æ§æããµããŒããããã©ãŠã¶ãŒã®ã¿ã察象ãšããŠããå Žåã¯ãæçµåºåã«
ããã©ãŒãã³ã¹äžã®çç±ãããéçºè
ãå°æ¥ã®äºææ§ã®ããã«#
æ§æã䜿çšã§ããããã«ãããªãã·ã§ã³ãæ€èšãã䟡å€ããããããããŸãããïŒããå€ãã®ãã©ãŠã¶ãŒãããããµããŒãããå ŽåïŒãå®éã«ã¯__ts#
ç¹å¥ãªãã¬ãã£ãã¯ã¹ãæã€ãããªãã¯ããããã£ã«ãã©ã³ã¹ãã€ã«ããŸã#
æ§æã䜿çšããéçºè
ã¯éåžžãã³ã³ãã€ã«æãšå®è¡æã®äž¡æ¹ã®ãã©ã€ããŒãã§ãããšæ³å®ããããã§ãã ãã ããå®è¡æã®ããã©ãŒãã³ã¹ãæ倧åãããã®éã«ã³ã³ãã€ã«æã®ãã©ã€ããŒãã ãã«æºè¶³ãããå Žåã¯ãããã©ãŒãã³ã¹ãäœäžãããããšãªããæ°ããæ§æã®äœ¿çšãéå§ããã®ã«é©ããæ¹æ³ã«ãªãå¯èœæ§ããããŸãã
å®è£ ã®é²æç¶æ³ã«é¢ããæŽæ°ã¯ãããŸããïŒ ããããããã¹ãããŠãã£ãŒãããã¯ãæäŸããããã«æ§ç¯ã§ããPRã§ããïŒ
@jhpratt確ãã«ïŒ ãã®PRã§ãã©ã³ãããã§ãã¯ã¢ãŠããããšããã©ã€ããŒãåã®ã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ãããã¹ãã§ããããã«ãªããŸãã ã¡ãœãããšã¢ã¯ã»ãµãŒã¯é²è¡äžã§ãã
ãã®äœæ¥ãäžæµã«é²ããããšèããŠããŸãã ãã®åææ¡ä»¶ã®PRãããŒãžããããšããã«ããã®ãªããžããªïŒMicrosoft / TypeScriptïŒã«å¯ŸããŠå€æŽãPRã§ããŸãïŒ //github.com/Microsoft/TypeScript/pull/30467ã
ãã£ãŒãããã¯ã¯å€§æè¿ã§ãã
ãPrivateInheritanceããä»æ§ã®äžéšã§ãããã©ããã¯ããããŸããã
ã¡ãªã¿ã«ã100ïŒ çã®ãã©ã€ãã·ãŒãå®çŸããããã«ããã®æ©èœãããŒã¯ã©ã¹ã«åé€ããäºå®ã§ãã ç§ã¯å®éã«ã¯ãããæ¬åœã«å¿ èŠãšããŸããã§ãããããã¯ãã£ãšå®éšã§ããã
ã¡ãªã¿ã«ããç§çç¶æ¿ãã«é¢ããçè«ã圹ç«ã€å¯èœæ§ãããå Žåã«åããŠãããã«æçš¿ããããšæããŸãïŒãããããèå³æ·±ãããŸãã¯ä»ã®ã¢ã€ãã¢ã®ç«ä»ã圹ã«ãªãå¯èœæ§ããããŸãïŒã
ããªããèå³ãæã£ãŠããå ŽåïŒ
ããã©ã€ããŒãç¶æ¿ãïŒçŸåšã®ããŒãžã§ã³ã®ããŒã¯ã©ã¹ã«èŠãããããã«ïŒã¯ããµãã¯ã©ã¹ãã¹ãŒããŒã¯ã©ã¹ããç¶æ¿ããããã©ã€ããŒãã¡ãœããã䜿çšã§ããããšãæå³ããŸãããã¡ãœããã¯ããããããã®ãµãã¯ã©ã¹ã®ã¹ã³ãŒãå ã®ã€ã³ã¹ã¿ã³ã¹ã®ãã©ã€ããŒãããããã£ã«å€æŽã®ã¿ãé©çšããŸãããµãã¯ã©ã¹ã«ã¯ãç¬èªã®å®çŸ©ã§ãã©ã€ããŒãã¡ãœãããšããŠå®çŸ©ãããã¡ãœããããããŸãããããµãã¯ã©ã¹ã¯ãã¹ãŒããŒã¯ã©ã¹ãŸãã¯å åŒã¯ã©ã¹ã®ã¹ã³ãŒãå ã®ã€ã³ã¹ã¿ã³ã¹ã®ãã©ã€ããŒãããããã£ãå€æŽã§ããŸããã
æ¯èŒãããšããä¿è·ãããç¶æ¿ãã§ã¯ããµãã¯ã©ã¹ã¯ããèªäœã®ã€ã³ã¹ã¿ã³ã¹ãŸãã¯ã¹ãŒããŒã¯ã©ã¹ã€ã³ã¹ã¿ã³ã¹ã®ããããã£ãå€æŽã§ããŸãããå åŒã¯ã©ã¹ã®ããããã£ãå€æŽããããšã¯ã§ããŸããã ä¿è·ãããç¶æ¿ã§ã¯ããµãã¯ã©ã¹ã¯ãã¹ãŠã®ã¹ãŒããŒã¯ã©ã¹ã衚瀺ã§ããããããã£ãå€æŽããŸãïŒã¹ãŒããŒã¯ã©ã¹ã¯ãã¹ãŠåãããããã£ã«å¯ŸããŠèªã¿åã/æžã蟌ã¿ãè¡ããŸãïŒã
èšãæãããšãããã©ã€ããŒãç¶æ¿ãã®æŠå¿µã§ã¯ãåã¯ã©ã¹ã«ãã©ã€ããŒãã¹ã³ãŒãããããä¿è·ãããã¡ãœãããã¯ã©ã¹éå±€å šäœã®åäžã®ã¹ã³ãŒãã§åäœããä¿è·ãããã¡ãœãããšã¯å¯Ÿç §çã«ãç¶æ¿ããããã©ã€ããŒãã¡ãœããã¯ããŒã«ã«ã¯ã©ã¹ã¹ã³ãŒãã§ã®ã¿åäœããŸãã
ãããçã«ããªã£ãŠãããã©ããããããªãã®ã§ãçŸåšã®ecmaproposal-class-fieldsãã©ã€ããŒããã£ãŒã«ãæ©èœã䜿çšããŠèšè¿°ããå Žåãããã©ã€ããŒãç¶æ¿ããã©ã®ãããªãã®ã«ãªããã説æããç°¡åãªã³ãŒãäŸã次ã«ç€ºããŸãã
ãµã³ãã«ã³ãŒãã¯ç解ããããã§ãïŒ
ããããŒã¶ã«ã¯ã©ã¹ãã£ãŒã«ãã«ã¯ããã©ã€ããŒãç¶æ¿ãããªãããã以äžã¯æ©èœããŸããïŒãããŠãçã®ãã©ã€ãã·ãŒãç¶æããããã«ããããæãŸããããšã«åæããŸãïŒã
class Foo {
test() {
this.#privateMethod()
}
#foo = 'foo'
#privateMethod() {
console.log(this.#foo)
}
}
class Bar extends Foo {
test() {
// This does not work, no private inheritance:
this.#privateMethod()
}
// #foo is private only inside Bar code, it is NOT the same #foo as in Foo
// scope.
#foo = 'bar'
}
ããŒã¯ã©ã¹ã§ã¯ãããã©ã€ããŒãç¶æ¿ãã¯ããšãã£ã¿ãŒã§ã³ããŒ/貌ãä»ãã䜿çšããŠãåãããšããšãã¥ã¬ãŒããã次ã®éDRYã³ãŒããèšè¿°ããããšãšåãã§ãã
class Foo {
test() {
this.#privateMethod()
}
#foo = 'foo'
#privateMethod() {
console.log(this.#foo)
}
}
class Bar extends Foo {
test() {
// This does not work, no private inheritance:
this.#privateMethod()
}
// #foo is private only inside Bar code, it is NOT the same #foo as in Foo
// scope.
#foo = 'bar'
// copy the method over by hand (because there's no private inheritance):
#privateMethod() {
console.log(this.#foo)
}
}
ã©ã¡ãã®äŸã§ãã #foo
å€æ°ã¯åã¯ã©ã¹ã«åºæã®å€æ°ã§ãã #foo
å€æ°ã¯1ã€ã§ã¯ãªãã2ã€ãããŸãã ãããããåãã¯ã©ã¹å®çŸ©ã®ã³ãŒãã«ãã£ãŠã®ã¿èªã¿åãããã³æžã蟌ã¿å¯èœã§ãã
ãã®æ¹æ³ã¯ããã®æ¹æ³ã䜿çšãããŠããç¯å²ã§åäœ_but_ lowclassã§ã¯ãæ°éã®ç¶æ¿ã¯ãåå©çšã®ãã©ã€ããŒãã¹ãŒããŒã¯ã©ã¹ã®ã¡ãœããã«ç§ãã¡ãããšãã§ããŸãã ãããã£ãŠãäžèšã®äŸã®ããã«ãã¹ãŒããŒã¯ã©ã¹ã¡ãœãããã³ããŒããŠãµãã¯ã©ã¹ã«è²Œãä»ããããã«ãªããŸãããã¯ã©ã¹ããšã«2ã€ã®å¥ã
ã®#foo
å€æ°ããããŸãã
ããŒã¯ã©ã¹ã§ã¯ãã¹ãŒããŒã¯ã©ã¹ã§#someMethod
ã䜿çšãããŠããå Žåãã¹ãŒããŒã¯ã©ã¹ã®#foo
ã§åäœããŸãã å Žåã¯#someMethod
ããµãã¯ã©ã¹ã®ã¹ã³ãŒãå
ã§äœ¿çšãããŠãããããã¯äžã§åäœ#foo
ãããªããµãã¯ã©ã¹ã®#foo
ã¹ãŒããŒã¯ã©ã¹ã®ïŒ
ãããã³ã³ã»ããã®èª¬æã«ãªãããšãé¡ã£ãŠããŸããããšã䜿ãããªããŠããã©ããªçš®é¡ã®ã¢ã€ãã¢ãçã¿åºãã®ã«ãé¢çœãã圹ç«ã€ãããããªããšæããŸãã
çŸåšChromeã®å®å®ãããã£ãã«ã«ãããããéçºè
ã¯ãã€ãã£ãã§äœ¿çšã§ããŸãã ç§ã¯VSCodeã®ããã«ãã®åé¡ã«äž»ã«èå³ããããŸã-ããã©.js
javascriptãæžããšããVSCodeã¯ããããšã©ãŒãšããŠããŒã¯ããŸãã Typescriptã«è¿œå ãããã©ããã®è°è«ãšã¯å¥ã«ãVSCodeã®Vanilla JSã®ãã©ã€ããŒãã¯ã©ã¹ãã£ãŒã«ãã®ãµããŒããè¿œå ããæ¹æ³ã¯ãããŸããïŒ
å人çã«ã¯ãTSãã¹ããŒãž4ã«å°éããåã«ããããã®ãµããŒããè¿œå ããå¿ èŠããããšã¯æããŸãããTSã«ã¯ãä»ã®ãšããååã«æ©èœããã³ã³ãã€ã«æã®ãã©ã€ããŒãããã§ã«ãããŸãã ãããã¹ããŒãž4ã«éããåŸãç§ã¯ãããçã«ããªã£ãŠããããšã«åæããŸãã ïŒè°è«ã®äžã§æææµåçãªçºäœããã£ãã®ã§ãç§ã¯ãŸã ããããã©ã€ã ã¿ã€ã ã®æºåãã§ããŠãããšã¯æããªãã§ããããïŒ
æŽæ°ïŒããŒã12ã®å®å®çã§ããµããŒããããŠããŸãã ãŸããBabelã«ã¯ããã®æ§æãå€æããããã®ãã©ã°ã€ã³ããããŸãã éçºè
ã¯ãã¹ããŒãž4ã®ææ¡ã«ãªãåã«æ©èœã䜿çšããããšããããããŸãã Vanilla JSïŒétsïŒã§ãã®æ§æã®ãµããŒããè¿œå ããããã jsconfig.json
ãä»ããŠãã®æ§æãæå¹ã«ããŠãVSCodeã§äœ¿çšæã«ãšã©ãŒã衚瀺ãããªãããã«ããæ¹æ³ãå¿
èŠã§ãã VSCodeãªããžããªã¯ãJSãµããŒããTypeScriptã«ãã£ãŠãµããŒããããŠããããã®åé¡ãåç
§ããŠãããšè¿°ã¹ãŠããŸãã
TypeScriptããã®æ©èœããŸã£ãããµããŒãããªãã®ã¯æå³ããããŸãããããã¯ãäž»èŠãªãã©ãŠã¶ãŒãšããŒãã®å®çšŒåç°å¢ã«ãã§ã«ååšããŠããããã§ãã ããã¯ãTypeScriptãä»ãããã¹ãŠãå®å šã«åºããããã©ã«ãã®æ©èœãšããŠãªãªãŒã¹ããå¿ èŠããããšããããšã§ã¯ãããŸããã
TypeScriptã¯ããã®æ©èœãå®éšçã§ãããã¹ããŒãž3ãšã¹ããŒãž4ã®éã§å€æŽãããå¯èœæ§ãããããšã瀺ããã©ã°ã®äžã«ãã©ã€ããŒããã£ãŒã«ããå°å ¥ããããšããå§ãããŸãã
ãã¶ããã»ãã³ãã£ã¯ã¹ãªãã§æåã«æ§æãµããŒããå®è£ ã§ããŸããïŒ
ãã¶ããã»ãã³ãã£ã¯ã¹ãªãã§æåã«æ§æãµããŒããå®è£ ã§ããŸããïŒ
ã¿ã€ããã§ãã¯/ã€ã³ããªã»ã³ã¹ã®å Žåãäœããã®ã»ãã³ãã£ã¯ã¹ãå¿
èŠã ãšæããŸããã BigInt
ãããªããŠã³ã¬ãã«å€æã®ãµããŒãã¯ãããŸããïŒ esnext
ã®ã¿äœ¿çšã§ããŸãïŒã
fwiwãå®è£ ã®ãã£ãŒãããã¯ã«ãããã¹ããŒãž3ã§ã®ã¿å€æŽãããå¯èœæ§ããããŸãã Chromeãåºè·ããŠããããšãèãããšãå€æŽãè¡ãããå¯èœæ§ã¯ã»ãšãã©ãããŸããã
@ ChrisBrownie55ãã®æ©èœããŸã å®è£ ãããŠããªãããšã¯æå³ããªããšæããŸã
ããã¯é²è¡äžã®ããã§ãïŒ
https://github.com/microsoft/TypeScript/pull/30829
ïŒããã¯æããã«https://github.com/microsoft/TypeScript/pull/30467ã§åŸ
æ©ããŠããŸãïŒ
ããã§ããïŒ30829ã¯ããªããŒã¹åŸã«ããŒãžã®æºåãã§ããŠããŸããããã€ãã®æ©èœã²ãŒãã£ã³ã°ãæ³ãšããŠããã©ã€ããŒãåã®ã¡ãœããã§ççºããŸãã
ã¿ããªãäž»èŠãªãã©ãŠã¶ããã®æ©èœãå®è£ ãããããšãã£ãŠïŒãããã©ã®ããã«æããããããããã§éã¶ãªã©ïŒã誰ãããããã¹ãã ãšã¯éããŸããã
è°è«ã®äžã§æææµåçãªçºäœããã£ãã®ã§ãç§ã¯ãŸã ããããã©ã€ã ã¿ã€ã ã®æºåãã§ããŠãããšã¯æããªãã§ããã
@isiahmeadowsãè¿°ã¹ãããã«ãã¯ã©ã¹ãã£ãŒã«ãã®ææ¡ã¯è«äºã«æºã¡ãŠãããå€ãã®äººã ããããå«ã£ãŠããŸãã çŸåšã®ãã©ã€ããŒããã£ãŒã«ãã«å¯Ÿããã³ãã¥ããã£ã®å«æªæã瀺ãããã€ãã®åé¡ããããŸãã
ç§ãèšèªã®å®è£ è ã§ããå Žåãããã«ã€ããŠå¿é ããŸããäœå人ãã®ïŒç¥ããªãïŒéçºè ãåé¡ã®ãããã®ã䜿ãå§ããããšãèš±å¯ããããšã«ããã®ã§ãéåžžã«å«ãããŠããæ©èœããªãªãŒã¹ãããïŒç³ã«èšå®ãããïŒè²¬ä»»ãè² ããããããŸããããããã¯ã·ã§ã³ã³ãŒãã®æ©èœã
ãã©ã€ããŒããã£ãŒã«ãã¯ãES6以éã«å°å ¥ããããã¹ãŠã®æ©èœã®äžã§ããããæãç©è°ãéžããŠããŸãã èšèªã®å®è£ è ã¯ãæ©èœãç³ã«èšå®ããåã«ãå«ããªãã®ãèæ ®ã«å ¥ããã®ãè³¢æã ãšæããŸãã
@trusktrããã¯ç©è°ãéžãæ©èœãããããŸããããéçºè ãããã䜿çšãããã©ããã¯ãããŒã«ã§ã¯ãªãéçºè ã«ä»»ããã決å®ã§ãªããã°ãªããŸããã äž»èŠãªãã©ãŠã¶ã¯ããããã§éã¶ãããã§ã¯ãªããæ¬çªç°å¢ã§äœ¿çšããããã«åºè·ããŸããã ãŸããæã人æ°ã®ãããµãŒããŒåŽJSã©ã³ã¿ã€ã ã§ããNodeã«ãå梱ãããŠããŸãã ç¹°ãè¿ãã«ãªããŸãããæ§æãTypeScriptã«å°éãããã©ããã«ã€ããŠã¯ããŸãé¢å¿ããããŸããããæ§æãVSCodeïŒTypeScriptã«ãã£ãŠãµããŒããããŠããïŒäžã®JavaScriptèšèªãµãŒããŒã«ãã£ãŠãµããŒããããŠãããã©ããã«ã€ããŠã¯ãã£ãšé¢å¿ããããŸãã
Nodeã§ãåºè·ãããŠããŸã
Nodeã®JSãšã³ãžã³ãç¶æããChromeãªãªãŒã¹ã®å¯äœçšãšããŠã®ã¿ã
ããã¯ç©è°ãéžãæ©èœãããããŸããããéçºè ãããã䜿çšãããã©ããã¯ãããŒã«ã§ã¯ãªãéçºè ã«ä»»ããã決å®ã§ãªããã°ãªããŸããã
ããã¯ããªãã®ãããªéçºè ã®å ŽåãããããŸããïŒãã¶ãããªãã¯ãã 補åããªãªãŒã¹ããå¿ èŠããããŸãããããŠããªãã¯ããªããæã£ãŠããã©ããªããŒã«ã§ãåãã§ããããããã¯å®éããªãããã®ç¹ã§ãã¹ãããšã§ããããããŠå€ãã®éçšãããéçºè ãããŸãïŒã
äžããããããŒã«ã䜿ãããšããŠããã ãã§ãã¯ã©ã¹ãã£ãŒã«ãã«é¢é£ä»ããããŠãããããã¬ã³ã«ã€ããŠç¥ããªãéçºè ãããããããŸãã
ãŸããèšèªèªäœãšä¿å®å¯èœãªã³ãŒãã®å°æ¥ãæ°ã«ããç¹å®ã®ééããå ã«æ»ãã«ã¯æé ãã«ãªãåã«ãæ£ããé²åããããšãæãã§ããéçºè ãããŸãã
æ°ãããã©ã€ããŒããã£ãŒã«ãã¯#
æ§æã䜿çšããŠããããã代ããã«private
ããŒã¯ãŒãã䜿çšããŠä¿®æ£ããäœå°ããããŸãã
TSã¯æ¬åœã«æšæºã®100ïŒ
ã«åŸãå¿
èŠããããŸããïŒ å§å¡äŒãthisGlobal
ãŸãã¯#privateLol
ã§ã³ãã¥ããã£ã«å察ããŠããããšã¯ãã§ã«ç¥ã£ãŠããã®ã§ãæé
ãã«ãªãåã«GoogleãJavaScriptãç¬å ããŠããªããšèšãæãæ¥ãã®ã§ã¯ãªãã§ããããã
@TeoTNãã©ã€ããŒããã£ãŒã«ãã¯Googleã®ãã®ã§ã¯ãããŸããã ä»ã®ãã¹ãŠã®æè¿ã®æšæºãšåæ§ã«ãTC39ãä»ããŠé²ããããŠããŸãã
æ確ã«ããããã®ããã€ãã®ãã€ã³ãïŒ
@RyanCavanaugh説æãšãã¹ãŠã®çŽ æŽãããä»äºã«æè¬ããŸãïŒ å°ããªææ¡ïŒESã¯ç¶ç¶çã«é²åããŠãããå€ãã®æ©èœãéçºãããŠããŸããã©ã®æ®µéãã€ãŸã段é4ã§ããããšããã«ãŒã«ãèšå®ããã®ã¯è¯ãããšã ãšæããŸãã ã¹ããŒãž3ïŒ ãŸãã¯ãã®éã®ã©ããïŒ -ESæ©èœãå«ããããšãã§ããŸãã ããã§ãªããã°ããã®çš®ã®è°è«ã¯ä»ã®æ©èœã®ããã«å°æ¥äœåºŠãç¹°ãè¿ãããå¯èœæ§ããããŸãã
ãã©ã€ããŒããã£ãŒã«ãã¯å®å šã«çŒããããšåççã«èšãããšãã§ããŸãã
@kkimdevã¹ããŒãž4ã¯ãããè¡ãéãã§ãã ããã¯æšæºã®äžéšã«ãªã£ãããšãæå³ããŸãã
å®å šã«ãã€ã¯ãããŠããªãESæ©èœ
äžæè°ãªããšã«ãå®å šã«çŒãä»ããããESæ©èœãšã¯äœã§ããïŒ ãã®äŸã§ãå®å šã«çŒãäžããããšã¯ã©ãããæå³ã§ããïŒ
æ¿èªãããESæ©èœã®å®è£ ãšåºè·ã¯ãªãã·ã§ã³ã§ã¯ãããŸãã
TypeScriptã®ç®æšãããã©JSãããåçŽãªåã§ããããšãèãããšãããã¯å®å
šã«åççã§ãïŒãããã£ãŠã namespace
ãããªãã®ã¯çŸåšã®ç®æšã«é¢ããŠæªãéžæã§ããã enum
ãè°è«ã®äœå°ããããŸãïŒã
TypeScriptã«ã¯ããã¹ãŠã®äž»èŠãªãšã³ãžã³ãç¹å®ã®æ©èœãæºå ŽäžèŽã§åºè·ãããŸã§æ©èœã®åºè·ãåŸ ã€ïŒãŸãã¯åŸ ããªãïŒããšã§ãèšèªä»æ§ãå·Šå³ããã³ãã¥ããã£ãæ¯æŽããïŒãŸãã¯æ¯æŽããªãïŒåããããŸãã
TSããŒã ã®ã¡ã³ããŒã¯TC39ã«åº§ã£ãŠãããããéå¹çã®ããã§ãããã®ãããæåã«èª°ããåºè·ããåã«ãã¹ããŒãž3ã®æ©èœã«ã€ããŠã¯ããã§ã«ã³ã³ã»ã³ãµã¹ã®äžéšã«ãªã£ãŠããŸãããããå«ãŸããŸãã
ç§ã¯TypeScriptã®èšèšäžã®æ±ºå®ããåºè·ããããã®ãä¿å®çã«ããããšãæ¬åœã«å€§åã«ããŠããŸãã å€ãã®å Žåãéçºè ã«ä¿èšŒãããå®å®æ§ãäžããããã«ãããå°ãåŸ ã€ã®ãçã«ããªã£ãŠããŸãã ç§ã¯ç§çåéã«é¢ããæ¿ç決å®ã«éåžžã«æºè¶³ããŠããããããã«ã€ããŠ@DanielRosenwasserãšé »ç¹ã«é£çµ¡ã
ãããã®èšèªèšèšã®æ±ºå®ã«ã€ããŠè°è«ããã®ã«æé©ãªå Žæã¯ãææ¡ãªããžããªãTC39äŒè°ãããã³ãã®äœæ¥ã«ç¹åããä»ã®ã³ã³ããã¹ãã§ãããšæããŸãã ãã©ã€ããŒããã£ãŒã«ããšã¡ãœããã®ææ¡ã«ã€ããŠã¯ã @ trusktrãšå¹ åºã
æçµçã«ã¯ãTC39ã¯èšèªèšèšãç¶ç¶ããå¿ èŠãããå Žæã§ãããTypeScriptãªããžããªã¯ãæ©èœã®åªå é äœãå®è£ ã®è©³çŽ°ãæ©èœã®ã¿ã€ãã³ã°ã®å€æãªã©ãä»ã®åŽé¢ã«ã€ããŠè©±ãåãå Žæã«ãªãå¯èœæ§ããããšæããŸããåºè·ããã®ã«ååå®å®ããŠããŸãã
TypeScript Intellisenseã¯ãVS Codeã§ã®JavaScriptæ§æã®åŒ·èª¿è¡šç€ºãšãVS Codeãªããžããªã§èŠã€ãã2ã€ã®æ§æãã€ã©ã€ãã®åé¡ïŒMicrosoft / vscodeïŒ72867ããã³Microsoft / vscodeïŒ39703ïŒã匷åããŠãããããããã§TypeScriptãžã®å®è£ ã«ã€ããŠèª¬æããŸãããããJavaScriptãã¡ã€ã«ã®ãšã©ãŒã«ãªããªãã®ã¯ã¯ãŒã«ã ãšèšã£ãŠè²¢ç®ãããŠãã ããã
å®å šã«æå¹ãªJavaScriptã¯ãVS Codeã§ãšã©ãŒãšããŠããŒã¯ãããŸããããã¯ãå¥ã®èšèªã®ã³ã³ãã€ã©ãŒããæ§æããµããŒãããããã©ããã決å®ããŠããããã§ãã :-)
TypeScriptãããã決å®ããåã«æéãå²ããŠãåé¡ã¯ãããŸãããïŒå®éã«ã¯ãµããŒãããŠããŸãïŒïŒãããã¯JavaScriptæ§æã®åŒ·èª¿è¡šç€ºã«åœ±é¿ãåãŒããç°¡åã«ä¿®æ£ããããããŒã«ã«ã§ããäœæ¥ãããããããšã¯ã§ããŸããïŒããããé©çšãããã®ããªãããïŒAFAIKïŒãã·ã³ã¿ãã¯ã¹ãã€ã©ã€ãã®ææ³ãã¡ã€ã«ã«ããããé©çšããŸãã
ç§ã¯TypeScriptããŒã ã«æå±ããŠããŸãããã圌ãã¯ããã®å®è£ ã«ç©æ¥µçã«åãçµãã§ãããçŸæç¹ã§ãã©ã€ããŒããã£ãŒã«ãããµããŒããããããšã«çãã®äœå°ã¯ãªããšæããŸãã https://github.com/microsoft/TypeScript/pull/30829ãåç §ããŠ
äœæ¥äžã§ããããšã確èªã§ããŸããTSããŒã ãšååããŠãããçŸåšãªããŒã¹ããŸãšããŠããŸãã TSïŒããã³æ¡åŒµæ©èœãšããŠLanguage ServerïŒã®ãã©ã€ããŒãåã®ãã£ãŒã«ãã«è奮ããŠããŸãã
https://github.com/microsoft/TypeScript/pull/30829ã§ãããå®è£ ããŠããããã«ãŒã ããŒã°ã®ååè ã«æè¬ã
ã¡ãã£ãšãããã ããã«ã€ããŠå¥ã®åé¡ãäœæãããå Žåã¯ããã®ããã«èšã£ãŠãã ããã ãã®åé¡ã®åå ãšãªã£ãç¹å¥ãª#private
PropertyDeclaration
ãçºè¡ããçç±ãç¥ããããšæããŸãã
ããšãã°ã次ã®å®£èšãçæãããŸãã
// index.d.ts
declare class Foo {
#private;
// ...
}
...å ¥åãäžããããïŒ
// index.ts
class Foo {
#name: string;
}
ç§ã¯æåã«ãããããã«ããå¿ èŠãããçç±ãç解ããããšããŠããŸããã宣èšã®çæãäžå¿ã«ããŒã«ãæ§ç¯ããŠããããšãèãããšããããçç¥ã§ãããã©ãããç解ããããšããŠããŸãã
ç§ã¯æåã«ãããããã«ããå¿ èŠãããçç±ãç解ããããšããŠããŸããã宣èšã®çæãäžå¿ã«ããŒã«ãæ§ç¯ããŠããããšãèãããšããããçç¥ã§ãããã©ãããç解ããããšããŠããŸãã
ãã©ã€ããŒããååšãããšãåæã§ã¯ã¯ã©ã¹ãåç®äžã«ãªãããã宣èšãã¡ã€ã«ã§ãããä¿æããããšãéèŠã§ãã dts-downlevel
ãããªéä¿¡åŸã®å®£èšãã©ã³ã¹ãã©ãŒããŒããŒã«ã䜿çšããŠãå€ãTSã®ãã©ã€ããŒã宣èšãäœããã®æ¹æ³ã§ããŠã³ã¬ãã«åããããšãã§ããŸããïŒ ïŒ#privatesã®ããŠã³ã¬ãã«ããããã©ããã¯ãŸã ããããŸããïŒ
Wesleyã®çºèšã«å ããŠãdownlevel -dtsã¯ãå€ãããŒãžã§ã³ã®TypeScriptãšã®äºææ§ã®ããã«ã private
privateã
ãã©ã€ããŒããååšãããšãåæã§ã¯ã¯ã©ã¹ãåç®äžã«ãªãããã宣èšãã¡ã€ã«ã§ãããä¿æããããšãéèŠã§ãã
ãããã©ã®ããã«ã¯ã©ã¹ãåç®äžã«ãããã«ã€ããŠè©³ãã説æã§ããŸããïŒ ðè€æ°ã®ãã©ã€ããŒãããããã£#foo
ãš#bar
äžããããå Žåã§ãã宣èšã«è¿œå ãããç¹å¥ãª#private
ã¢ã³ããšã³ã宣èšã¯1ã€ã ãã§ãã ãã©ã€ããŒãããããã£ã®ååãæ°ã宣èšããåæããæ¹æ³ã¯ãããŸããããããã¯ãã¹ãŠåäžã®#private
ããããã£å®£èšã«çœ®ãæããããŠããããã§ãã #foo
ãš#bar
ãšããååãä¿æããŠããã°ããã£ãšããç解ã§ããŸãã ç¹ã«ãLanguageServiceã#private
ããããã£ã䜿çšãããŠããªããšæå¥ãèšãããšãèãããšãå°ãå¥åŠã§ãã ããã¯ç§ã«ã¯ãã°ã®ããã«èŠããŸãã ãããããã¹ãŠã®ç¶æ³äžã§ããã©ã€ããŒããã£ãŒã«ãã¯ãã®ã¿ã€ãã®ãããªãã¯ããããã£ã®äžéšã§ã¯ãªããã¯ã©ã¹ã®å€éšããã¢ã¯ã»ã¹ã§ããªããããçè«çã«ã¯ããããã宣èšã®äžéšã§ããå¿
èŠãããçç±ãããããŸããã KeyOf
ã¿ã€ãã§ã¯ãªããã¢ã³ããšã³ã宣èšã®äžéšã§ããªãã public
以å€ã®ã¢ã¯ã»ã¹ä¿®é£Ÿåã§ã¢ãããŒã·ã§ã³ãä»ãããããã£ãŒã«ããšã¡ãœããã«åãååãé©çšããã¹ãã§ã¯ãããŸãããïŒ
Wesleyã®çºèšã«å ããŠãdownlevel -dtsã¯ãå€ãããŒãžã§ã³ã®TypeScriptãšã®äºææ§ã®ããã«ã
private
privateã
è¯ã解決çã®ããã«èãããŸãã ãã ããããããããšã§ã private
修食åãæå®ããããããã£ã¯ããã®åã®ãããªãã¯ããããã£ã®äžéšã§ã¯ãªãããã .d.ts
ãã¡ã€ã«ã®äžéšã«ã¯ãªããŸããã ç§ã¯ç¹ã«å®£èšã«èå³ããããŸãã宣èšã¯ãæãåçŽãªäŸã§ãã #private
ãšåŒã°ããæªäœ¿çšã®ããããã£ã®èšºæãçæããŸãã
@wessbergäžèŠãªèšèªãµãŒãã¹ã®èŠåã«é¢ããŠæ°ä»ãããã°ã
ããªãã®ä»ã®è³ªåã«ã€ããŠïŒ
ãããã©ã®ããã«ã¯ã©ã¹ãåç®äžã«ãããã«ã€ããŠè©³ãã説æã§ããŸããïŒ
誰ãã以åã«ããã«ã€ããŠã®åé¡ãéã
ãããã®å Žåã«äœããåç®äžã®ãã®ã«ããçç±ã®1ã€ã¯ãã¯ã©ã¹ã®å®è£ è ããã©ã€ããŒããã£ãŒã«ãéã§é ãããäžå€æ¡ä»¶ãç¶æã§ããããã«ããããã§ããåãæ§é åãããšãå°ãªããšãããªã¹ãã¯åžžã«ãœãŒããããŸãããŸãã¯ãçŽåŸã¯2 *ååŸã§ããã
ãã1ã€ã®çç±ã¯ãå®è¡æã«ãæ£ããããšãè¡ããæ¹æ³ããªãããã以äžã®ãããªã³ãŒãã¯åãã§ãã¯ã«å€±æããã¯ãã§ãããšããããšã§ãã
class A {
#foo = getFoo();
bar = "bar";
equals(other: A) {
return this.#foo === other.#foo && this.bar === other.bar;
}
}
new A().equals({ bar: "bar" }); // error: missing property '#foo'
ãããããã #private
æ§æãããã®ã¯ãšãŠãããããã§ãïŒ ããã¯çŽ æŽãããã§ãïŒ
ããããç§ã¯æ¬åœã«å°æããŠããããšãèªããªããã°ãªããŸãããç§ãã¡ã¯æ¬¡ã®ãããªéèšæ§æãæã£ãŠããŸãã
class Counter {
#count = 0
increment() {
return #count++
}
}
ç§ã¯çåã«æã£ãŠããŸããâå®éšçãªæ©èœãšããŠççž®æ§æãæå¹ã«ããtypescriptãã©ã°ã€ã³ãŸãã¯tsconfigãªãã·ã§ã³ãéçºã§ããŸããïŒ
äžå¿
èŠãªthis.
ç¹°ãè¿ããé¿ããããã«ã人éå·¥åŠã«åºã¥ããå·§åŠãªæ¹åãæãã§ããŸããææ¡ã§ææãããŠããããã«ãçç¥æ§æã®æ¬ ç¹ã¯ãç§ãå¿é
ããé倧ãªæžå¿µã§ã¯ãªãããã§ããã ããç§ã¯ç¢ºãã«ç§èªèº«ã®ãããžã§ã¯ãã§"experimentalPrivateShorthand": true
ãŸãã¯ãã®ãããªãã®ãèšå®ããŠå¹žãã§ã
ããã¯ã§ããŸããïŒ å€åãããäžå¯èœãªæ£åœãªçç±ããããŸããïŒ é¢ä¿ããäœæ¥ã¯äœã§ããããïŒ ä¹Ÿæ¯ïŒ
ïŒæ³¢ïŒè¿œè·¡
@ chase-moskal TypeScriptã¯ãECMAScriptæšæºä»¥å€ã®Types以å€ã¯äœãå®è£ ããŠããŸããã ãã®çç±ã¯ããã©ã€ããŒããã£ãŒã«ããšãã³ã¬ãŒã¿ã«ãã£ãŠç€ºãããããã«ãã»ãã³ãã£ã¯ã¹ãå€æŽããããšã§ãã
@ chase-moskal this
åžžã«å
¥åããªãããã«ããæãå®çšçãªæ¹æ³ã¯ãæ£çŽãªãšãããIDEã§ã·ã§ãŒãã«ãããå²ãåœãŠãããšã§ãïŒããšãã°ãF3ãªã©ïŒã TSããŒãµãŒãŸãã¯BabelããŒãµãŒããã©ãŒã¯ããŠãã©ã°ã€ã³ãäœæããããšã§å€ãã®ããšãå¯èœã«ãªããŸããããããã¯ãã¹ãŠå€ãã®äœæ¥ã§ãããå
¬åŒã®ããŒã«ãšåæããªããªããŸãã ãã¡ãããããªãã®è³ªåã¯å
¬åŒã®ãµããŒãã«é¢ãããã®ã ã£ããšæããŸããç§ã®èããå
±æããããšæããŸããã
@jhpratt âããããç¶æããããã«äœ¿çšãããtypescriptã ããã¯ããªãããã®æã«ç§ã«ãã³ã¬ãŒã¿ãšç¢å°é¢æ°ãäžããŠãããŸããïŒ å°ãªããšãä»ãããã以åã¯babelãšç«¶äºåããããŸãã
æ£çŽãªãšãããç§ã¯æ¬åœã«ãŒãªãŒããªãŒã§ããç§ã®ããã«ã®ãããªãŽãŒãžã£ã¹ãªãããã«ãªã¯ã©ã¹ãæžãããšã¯ã§ããŸããã1幎以äžåã«å¯Ÿå¿ãããã®ã䜿çšããããšãã§ããŸãããããã«ã«ã¯ãç§ããã³çãããŠãããã¹ãŠã®ãã«ãšãã€ãã¹ã«ãããããŸãïŒ
@mbrowne âèªã¿ãããã»ã©éèŠãªã®ã¯ãå®éã«ã¯ã³ãŒãã®ãæžã蟌ã¿å¯èœæ§ãã§ã¯ãªãã®ã§ãããŒæŒäžã®ã«ãŠã³ãã«ã€ããŠå¿é
ããå¿
èŠã¯ãããŸããã ç§ã®ãã€ã³ãã¯ãjavascript this
ç¹°ãè¿ãã¯ãäœèšãªäŸ¡å€ã®ãªãæ··ä¹±ã§ããããšãå€ããããšããããšã§ãã
èªã¿ãããã®ããã«ãããèããŠã¿ãŠãã ãããçç¥åœ¢ã®#private
æ§æãååŸãããšã this
衚瀺ããããã³ã«ããããªãã¯ã¡ã³ããŒã«
ãšã«ãããç§ã¯typescriptããŸã ãã©ã€ããŒãã¡ãœããããµããŒãããŠããªãããšãçºèŠããŸãã
ã ãããããã¯ãã¹ãŠãæããã«ãã«ãŒã ããŒã°ã®äººã ãããããå€ãã®äœæ¥ãšæéãå¿ èŠãšããŸã
ãã£ãŒã«ãã«äžèŽãããã©ã€ããŒãã¡ãœããããªãå Žåã¯ãåŸ ã€å¿ èŠããããŸãïŒçæ°ã«ãªããã«ãåãã¯ã©ã¹ã§typescript-privatesãšhashtag-privatesãæ··åšãããããšã¯ã§ããªãããã§ãïŒïŒ
ããã§ãããã§ã¿ã€ãã¹ã¯ãªãããè¿ä»£åããã®ã¯ãã«ãŒã ããŒã°ããŒã ã§ããã圌ãã¯1幎åã«ãbabelã®åããã©ã€ãã·ãŒæ©èœã«é¢äžããŠããŸãããïŒ åœŒãã¯ç¥ã®ä»äºãããŠããããããŠç§ã¯ãªãèå³ãããã®ãââïŒ ããã°ãç¶ããïŒ ä¹Ÿæ¯ïŒ
ïŒæ³¢ïŒè¿œè·¡
ã¯ããTypeScriptã¯äœå¹Žãåã«ãã³ã¬ãŒã¿ãæäŸããŸããã äœã ãšæãïŒ ã»ãã³ãã£ã¯ã¹ãå€ãã£ãã倧ããªæéã çŸåšãTypeScriptã¯è¿ãå°æ¥ã¬ã¬ã·ãŒAPIã®ãµããŒãã«è¡ãè©°ãŸã£ãŠãããåé€ããããšã決å®ãããšãã¯ãã€ã§ã倧èŠæš¡ãªç ŽæãåŒãèµ·ãããŸãã ç¢å°é¢æ°ã¯ECMAScriptä»æ§ã®äžéšã§ããããããããèµ·åããããšã¯ãŸã£ããé¢ä¿ãããŸããã
TypeScriptã¯çŸåšãã¹ããŒãž3ã«å°éããåã«ECMAScriptããããŒã¶ã«ãå®è£ ããŠããŸãããTSãé¢å¿ãæã€åã«ãããã§çç¥åœ¢ãååŸããå¿ èŠããããŸãã
ã¯ããTypeScriptã¯äœå¹Žãåã«ãã³ã¬ãŒã¿ãæäŸããŸããã äœã ãšæãïŒ ã»ãã³ãã£ã¯ã¹ãå€ãã£ãã倧ããªæéã
ç§ãã¡ã¯çæ³çãªäžçã«äœãã§ããããçŸåšããã€ãã®æ©èœãå¿
èŠã§ãã ããšãã°ããã³ã¬ãŒã¿ã®ææ¡ã¯ãŸã ã¹ããŒãž2ã«ãããŸãããäžéšã®å€§ããªãããžã§ã¯ãïŒAngularïŒã¯ããããé·æéç©æ¥µçã«äœ¿çšããŠããŸãã å¥ã®äŸïŒECMAScriptã¯ãã¯ã©ã¹ã¡ã³ããŒã«protected
修食åãæå®ããŠããŸãããããã¯ãå®éã®åé¡ã解決ããã®ã«åœ¹ç«ã¡ãŸãã
çŸåšãTypeScriptã¯è¿ãå°æ¥ã¬ã¬ã·ãŒAPIã®ãµããŒãã«è¡ãè©°ãŸã£ãŠãããåé€ããããšã決å®ãããšãã¯ãã€ã§ã倧èŠæš¡ãªç ŽæãåŒãèµ·ãããŸãã
ä»ã®èšèªã§ããã³ã³ãã€ã©ãã©ã°ã®äžã«å®éšçãªæ©èœãå°å ¥ãããŠããŸãã
TypeScriptãã¹ããŒãž1ãŸãã¯2ã§åææ¡ãå®è£ ããå¿ èŠããããšã¯èšããŸããããECMAScriptã«ã¯åçã®ãã®ããªããããTSã«é¢ããå€ãã®èå³æ·±ãææ¡ãè¡ãè©°ãŸããŸããïŒäŸïŒ https ïŒ
@ikokostya TypeScriptããã³ã¬ãŒã¿ãå®è£ ããåŸã«ã»ãã³ãã£ã¯ã¹ãå€æŽãããäŸãšããŠããã³ã¬ãŒã¿ã䜿çšããŠããŸããã ãã®éèšã¯ãä»ããå¿ èŠãã ãšæ¬åœã«èšã£ãŠããã®ã§ããïŒ ç§ãä¿¡ããŠãã ãããç§ãã¡ã¯äœåãª5æåã管çããããšãã§ããŸãã ãããããªãã«ãšã£ãŠããã»ã©éèŠã§ãããªãã°ãããªãã¯ã³ã³ãã€ã©ãèªç±ã«ãã©ãŒã¯ããããšãã§ããŸãã
TypeScriptã¯ããã©ã°ãç«ãŠãããŠããŠããã¹ããŒãž3ã®åã«ã¯äœãå®è£ ããªãããšã«åºå·ããŠããŸãã ããã¯ã以åã«ä»ã®ããŸããŸãªåé¡ã§åŸ¹åºçã«è°è«ãããŸããã
åãæã以å€ã«äœãèŠããªãã®ã§ãç¹çãã¹ãããšãåºãŠããªãéãããã以äžå¯Ÿå¿ããŸããã
@jhprattç§ã®ãã€ã³ãã¯éèšã§ã¯ãããŸããã ç§ã®ã³ã¡ã³ããèªãã§ãã ããã
ãã©ãŒã¯ã«ã€ããŠã®ææ¡ã¯ãŸã£ããé¢ä¿ãããŸããã
誰ããåæããããã§ã¯ãããŸãããããã«èšãã°ãTC39å§å¡äŒã®å šå¡ãåæããããã§ã¯ãããŸããããéèšã«ãã£ãŠã³ãŒããããèªã¿ããããçŽæçã«ãªããŸãã ããã«ã€ããŠã¯å€ãã®è°è«ãããããããã®æžå¿µã®ããã«çç¥æ§æã¯å¥ã®ææ¡ã«ç§»ãããŸããã ïŒç§èªèº«ã®æ確ãªæèŠã圢æããã®ã«ååãªããšãèããŠããŸããã§ãããèŠçŽãäžããã ãã§ããïŒãã®ææ¡ãåé²ããããå Žåãå ã«é²ãæ¹æ³ã¯TC39ã«ãã£ãŒãããã¯ãæäŸããããšã§ãã TSã®ç¶æãšãã¹ããŒãž3ã«å°éãããã¹ãŠã®ææ¡ã®å®è£ ã«ã¯ããã§ã«å€ãã®äœæ¥ãå«ãŸããŠãããšç¢ºä¿¡ããŠããŸãããããã£ãŠãTC39ã§ããã«åé²ããªãéãããããTSã§æ€èšãããããšãæ³åããã®ã¯å°é£ã§ãã
ããããç§ã¯éèšæ§æãæã£ãŠããªãã®ã§æ¬åœã«å°æããŠããããšãèªããªããã°ãªããŸãã
ãã®çç¥åœ¢ã¯ã #
ã䜿çšããå¯èœæ§ã®ãããã€ãã©ã€ã³ææ¡ãšäºææ§ããªããã¹ããŒãž2ææ¡ã«ãªãããšã«ã€ããŠã¯ãã§ã«èª¬æãããŠããŸãã ããã»ã©æ©ã段éã§ææ¡ãå®è£
ããŠãããé倧ãªå€æŽãå ããããšã¯å®éã«ã¯æå³ããããŸããã ãã®ãããªåæ段éã§ã¯ãã©ã®ææ¡ãåã€ãããããããŸããã
äºææ§ãããããšãããã£ããšããŠãããã¬ãã£ãã¯ã¹#
æŒç®åã®äœ¿çšäŸã¯ãå°ãªããšãããã€ãèããããŸããããã¯ã5æåäœåã«å
¥åããããã®çç¥åœ¢ããã䟿å©ã§ãã
âŠç¹ã«ããã©ã€ããŒããã£ãŒã«ãã®ãŠãŒã¹ã±ãŒã¹ã®ããªãã®éšåãthis
ã«ãŸã£ãããªãå ŽåïŒããšãã°ã static isMe(obj) { try { obj.#x; return true; } catch { return false; } }
ãªã©ïŒã
@phaux âéèšãšãã€ãã©ã€ã³ã«ã€ããŠã®æ¬åœã«è¯ãæ å ±ã§ããããããšãïŒ
@jhpratt
TypeScriptã¯ããã©ã°ãç«ãŠãããŠããŠããã¹ããŒãž3ã®åã«ã¯äœãå®è£ ããªãããšã«åºå·ããŠããŸãã
ååã«å ¬å¹³ã§ããããã©ã€ããŒãã¡ãœããã¯å®éã«ã¯ã¹ããŒãž3ã§ãããã¿ã€ãã¹ã¯ãªããã®ãµããŒãã¯ãŸã ãããŸããâèŠãŠãç§ã¯éèšã®ææ¡ããšãŠã奜ãã§ãããããã¯ãã ã®çŸçã§ãâç§ã¯å®éã«ã¯ä»ã¯ãã©ã€ããŒãã¡ãœãããšã¢ã¯ã»ãµãŒã®æ¬ åŠã«ã€ããŠãã£ãšæ©ãŸãããŠããŸã
ãã«ãŒã ããŒã°ããŒã ã¯ã1幎åã®ããã«ã®å Žåãšåãããã«ãããã§ã¿ã€ãã¹ã¯ãªããã«é¢ããç¥ã®ä»äºãç¶ããŠãããšæããŸããïŒ ãããããªããç§ãã¡ã¯æ¬åœã«èŸæ±åŒ·ã座ã£ãŠããå¿ èŠããããŸã:)
typescriptã¯ãecmascriptæ©èœã«é¢ããŠbabelããã©ãŠã¶ãšã¯ããã«ç«¶äºåããã£ãããã«æããŸãããå®éã«ã¯ä¿å®çãããŸããbabelãšchromeã®äž¡æ¹ã1幎åã«ãã©ã€ããŒããã£ãŒã«ãïŒãã©ã°ãªãïŒãåºè·ããŠããç¶æ³ã«ãããŸãããã«ãŒã ããŒã°ã¯ç§ãã¡ãæãããã«ãã£ãŠæ¥ãŸãã
ç§ã¯typescriptãšbabelã®æ©èœã»ããã®éã®å¿ã³å¯ãçžéã«äžå®ãæããŠããŸãâç§ã®babelã®åéã¯æšå¹ŽãçŸããæ»ãããªã³ãŒããæžããŠããŸãããç§ã¯ãŸã typescriptã®ããã«ãã£ãæã£ãŠããŸãâ圌ãã¯ç§ãç¬ã£ãŠããŸãïŒ
ç§ã¯ãã¿ã€ãã¹ã¯ãªãããå®éšçãªãã©ã°ãæäŸããŠããŠãå°æ¥ãªãã¡ã¯ã¿ãªã³ã°ããŠããã€ãã®åªããæ©èœãè³Œå ¥ãããªã¹ã¯ãå€æã§ããã®ã奜ãã§ãããçŸåšã¯ã¿ã€ãã¹ã¯ãªããã®ç«å Žã§ãããéçºè ã«ãããã®ãªã¹ã¯ã決å®ãããã®ã¯å±éºãããŸãããã®ã¿ã€ãã¹ã¯ãªããã¯ä»ç§ã®ä¹³æ¯ã§ããïŒ
ãŸããŸããçŽ æŽãããæ©èœãéçãªã¿ã€ããéžæã§ããããã«èŠããŸãããä»ã§ã¯äž¡æ¹ã®é·æã掻ããããšãã§ããªããããèªç¥çäžååãé«ãŸã£ãŠããŸãã
ããã§ã®ãã€ããã¯ã¹ã«æ¬åœã«èå³ããããŸãããã«ãŒã ããŒã°ãèŒãé§ãçãéšå£«ã®ããã«ä»å ¥ããªãã£ããšããããtypescriptãèªåãã¡ã§ææŠãããŸã§ã«ã©ããããã®æéãããããŸãããïŒ ãããšããããã¯ã¿ã€ãã¹ã¯ãªããã®å®éšã§ãããããããã®æ°æ©èœãåé¿ããã ããªããã³ãã¥ããã£ãç§ãã¡ã®ããã«ãããè¡ããŸã§ã«ã©ããããã®æéãããããŸããïŒãããã¡ããããã¯ç§ã«ãšã£ãŠãããªãç®èãªããšã§ãïŒ ãããšããããã¯ãªãŒãã³ãœãŒã¹ã®è³é調éãšãµããŒãã®ããã®æ°ããéã暡玢ããŠããæ¬åœã«ã¯ãŒã«ãªæ æ²æ·±ãã³ã©ãã¬ãŒã·ã§ã³ã§ãããäºæ³ãããå°ãé ãã ãã§ããïŒ ãããšããtypescriptã®å²åŠã¯ã以åãããã¯ããã«ä¿å®çã§ããïŒ ãã®ã¹ãã¯ãã«ã®ã©ãã«ããŸããïŒ
ã¹ããŒãž3ã®æ©èœãå®è£ ããå Žåãtypescriptã«åž¯åå¹ ãåªå é äœãäžè¶³ããŠãããšããããšã§ããïŒ
ç³ãèš³ãããŸããããç§ã¯ããã§å€±ç€Œãªããšãæ·±å»ãªéé£ãããã€ããã¯ãããŸãããéšå€è ã®èŠç¹ããèããæããããã ãã§ãã ç§ã¯ãã ã®ãŠãŒã¶ãŒã§ãããããã«ãã人ã ãç§ãæãããããã®åçã«ã©ã®ããã«åå¿ãããã«ã€ããŠæ¬åœã«èå³ããããŸãâèå³æ·±ãè°è«ãçããã«æè¬ããŸãïŒ
ïŒæ³¢ïŒè¿œè·¡
ç§ã¯ãã¿ã€ãã¹ã¯ãªãããå®éšçãªãã©ã°ãæäŸããŠããŠãå°æ¥ãªãã¡ã¯ã¿ãªã³ã°ããŠããã€ãã®åªããæ©èœãè³Œå ¥ãããªã¹ã¯ãå€æã§ããã®ã奜ãã§ãããçŸåšã¯ã¿ã€ãã¹ã¯ãªããã®ç«å Žã§ãããéçºè ã«ãããã®ãªã¹ã¯ã決å®ãããã®ã¯å±éºãããŸãããã®ã¿ã€ãã¹ã¯ãªããã¯ä»ç§ã®ä¹³æ¯ã§ããïŒ
ããã¯ããªãããããããããããšã«ã€ããŠã§ã¯ãããŸããã ããã¯ãææ¡ã®ã»ãã³ãã£ã¯ã¹ãå€æŽããããšãã«å¿ ç¶çã«ã¡ã³ããã³ã¹ã®è² æ ã«ãªãæ©èœã®å®è£ ã«æéãè²»ãããããªããšããããšã§ãã 圌ãã¯ãTSã®å®è£ ãšç«¶åããŠãããšãã«ãå€æŽãããã»ãã³ãã£ã¯ã¹ã調æŽããæ¹æ³ãç解ããããšã«æéãè²»ãããããããŸããã 圌ãã«ã¯ãã£ãšè¯ãããšããããŸãã 解決ãã¹ãåé¢é£ã®åé¡ã¯ãŸã å±±ã»ã©ããã®ã§ãéããããªãœãŒã¹ãããã«è²»ãããåã·ã¹ãã ã®åé¡ã解決ããããšã«å ããŠTC39ã®ä»äºãããããšããªãã®ã¯çã«ããªã£ãŠããŸãã
ãã©ã€ããŒãã¡ãœãããšã¢ã¯ã»ãµãŒã«ã€ããŠïŒããããV8ã§ã¯å®è£ ãããŠããŸããã ã¯ã©ã¹ã¡ãœãããšã€ã³ã¹ã¿ã³ã¹ãã£ãŒã«ãã¯ç°ãªãããããããµããŒãããããã«ã¹ã€ãããåãæ¿ããããšã¯ã§ããŸããã ããããå®è£ ããã«ã¯å®éã®æéããããã圌ãã¯ãã§ã«çŸç¶ã®ãŸãŸã§ä»äºã§ãã£ã±ãã§ããã圌ãã¯å°ããªããŒã ã§ãã ããã«ãã«ãŒã«ã¯ãããããŒã¶ã«ãã¹ããŒãž3ã«ããå¿ èŠããããšããã ãã§ã¯ãããŸããããŸããããããŒã¶ã«ã®ã»ãã³ãã£ã¯ã¹ãæçµçãªãã®ã§ããããšã«é«ãä¿¡é Œã眮ããããšæ確ã«è¿°ã¹ãŠããŸãã ãŸãã§ãããã»ãã³ãã£ã¯ã¹ã¯ã¹ããŒãž3ã§å€æŽã§ããŸãããã®æ©èœã¯ãæ£åœãªçç±ããªãV8ã«å®è£ ãããŠããŸããã 誀解ããªãã§ãã ããã ç§ããã®ææ¡ãå®è¡ãããã®ã楜ãã¿ã«ããŠããŸãããããŠããã䜿ãã®ãåŸ ã¡ãããŸããã ãã ããåæ段éããã®ææ¡ã®å®è£ ã¯æéã®ç¡é§ã§ãããTSããŒã ã®æéã¯ä»ã®å Žæã§ããé©åã«è²»ããããŸãã _ä»æ¥_䜿çšãããã¹ããŒãž2ã1ã0ã®ææ¡ã¯ç¡æ°ã«ãããŸããããŸã ãããã䜿çšã§ããªãçç±ã¯ç解ããŠããŸãã ç§ã®å人ãææ ¢ããŠãã ããã
ãŸããbabelãæäŸãããªãã·ã§ã³ãåžæããå Žåã¯ãbabelãæä»çã«äœ¿çšããŠã¿ã€ãã¹ã¯ãªããããã©ã³ã¹ãã€ã«ããããšãã§ããŸãã
@ 0kku â
@ljharb âããã¯éåžžã«èå³æ·±ãããšã§ãâ typescriptãšbabelããã®ãããªæ¹æ³ã§äžç·ã«å®è¡ããããšã¯å®éã«å¯èœã§ããïŒ äž¡æ¹ã®é·æãéæããã«ã¯ïŒ
ããããç§ã¯vscode tsèšèªãµãŒãã¹ãïŒããšãã°ãã©ã€ããŒãã¡ãœããã®ãããªïŒãªãã¿ã®ãªãæ§æãå ç Žããã«ã©ã®ããã«æ©èœããã®ããèŠãããšãã§ããŸãããïŒ ã€ã³ããªã»ã³ã¹ã®æ¬ åŠã¯ãtypescriptã®äŸ¡å€ææ¡ããããŸãã«ã倧ããªå¡ãåã¿ãŸãâã€ã³ããªã»ã³ã¹ãå®å šã«ç¡å¹ã«ããå¿ èŠãããå ŽåãæŠç¥ã¯åå¿è ã§ã¯ãããŸãã
ãããé·æçã«ã©ã®ããã«ä¿®æ£ã§ããŸããïŒ å®éšçãªæ©èœã®æ§æããšã«ç¹å®ã®ã¿ã€ãã¹ã¯ãªãããšã©ãŒãåºå¥ããã¿ã€ãã¹ã¯ãªãããããžã§ã¯ããtsconfigã¬ãã«ã§ãããã®ç¹å®ã®ãšã©ãŒãç¡å¹ã«ã§ããå Žåã¯ãbabelæ©èœãšã¿ã€ãã¹ã¯ãªããæ©èœã®äž¡æ¹ã掻çšããããã«ãã¢ãéããã·ã§ããããããšæããŸããåæã«âæ¬åœã«ãã£ãããç·ã§ãã¯ã©ã¹å šäœã®äžæºãããã¯ã¢ãŠãããŸãã也æ¯ïŒ
ïŒæ³¢ïŒè¿œè·¡
@ljharb
ãŸããã¿ã€ãã¹ã¯ãªããããã©ã³ã¹ãã€ã«ããããã«ãbabelãæä»çã«äœ¿çšããããšãã§ããŸãã
Babelã䜿çšããŠãã©ã€ããŒãã¡ãœããã®ã¿ããã©ã³ã¹ãã€ã«ãïŒãã ããä»ã®ãã¹ãŠã®åã¯ãã®ãŸãŸã«ããŠïŒã tsc
ã䜿çšããŠãã®ã³ãŒãã®åãã§ãã¯ãå®è¡ããåãã§ãã¯ããã»ã¹ãèšå®ã§ãããšæããŸãã ïŒãã¹ãã¿ã€ããã§ãã¯ããåŸã®ãã«ãã¹ã¯ãªããã¯ãBabelã®ã¿ã䜿çšããŸããïŒããããIDEã®å€ãã®æ§æãšã©ãŒãç¡èŠããå¿
èŠããããŸããããã¯ãã»ãšãã©ã®äººã«ãšã£ãŠå€§ããªåé¡ã«ãªããšæããŸãã
@ chase-moskal @ 0kkuãèšã£ãããšã¯äžè¬çã«æ£ããã§ãããèŠåœãããŸããã ãã®ææ¡ã¯ã¯ã©ã¹ãã£ãŒã«ããããé ããŠã¹ããŒãž3ã«å°éããã ãã§ãªããå®è£ è ã¯ãŸã åãçµãã§ãããšæããŸãã
å®éšçãªæ©èœã«é£ã³ã€ãããšã«ç±å¿ã§ãªãçç±ã«èå³ãããå Žåã¯ã --useDefineForClassFields
ããéåžžã«è€éãªclusterfoxtrotãåç
§ããŠãã ããã ç°ãªãã»ãã³ãã£ã¯ã¹ãæã€å¯èœãªTC39ææ¡ãååšããå¯èœæ§ããããåŸãªããšããä»®å®ã®äžã§ãéåžžã«æ©ã段éã§ã¯ã©ã¹ããããã£åæååãå®è£
ããŸããã
ãã³ã¬ãŒã¿ã¯åãããŒãã«ä¹ãåŸåã«ãããå€ãã»ãã³ãã£ã¯ã¹ã®ãµããŒããå®å
šã«å»æ¢ã§ãããšæããšãé©ããŸãã è€æ°ã®å€§äŒæ¥ãããã®åšãã«ããæ¡çšãããŠãã倧èŠæš¡ãªãã¬ãŒã ã¯ãŒã¯ãæ§ç¯ããŠããŸãã ãæã®ååã¯experimental
å§ãŸã£ãŠããã®ã§ãéå»5幎éãµããŒããããŠãããã®æ©èœããã€ãã¯æ¶ããŠããŸããããããªãããšãç¥ã£ãŠããã¹ãã ã£ãããšèšããã®ã¯å®å
šã«éçŸå®çã§ãã
ãããã®æ©èœã®äž¡æ¹ã«ã€ããŠãç§ãã¡ã¯æ®ãã®äººçã®ããã«ããã§2ã€ã®åŸ®åŠã«ç°ãªãã³ãŒããã¹ãç¶æããããšã«åºå·ããã§ãããããããŠããã¯ã²ã©ãã§ãããããããã¯ãã¬ãŒããªãã§ã-ç§ãã¡ã¯ãã«ãããŒãã«ãã®TypeScriptãç¶æããããšã«éåžžã«ã³ãããããŠããŸãã³ãŒãã®å®è¡æã®åäœãæãªãããšãªãå¯èœãªæŽæ°ã ãã®ãã¬ãŒããªãã¯ããããããªãã«æå©ãªå ŽåïŒããšãã°ãããã°ã©ã ãæ©èœãç¶ããå ŽåïŒã«ã¯èŠããŸããããç±å¿ãªæ©èœã®æ¡çšãšããç¹ã§æ¬ ç¹ãããç°¡åã«èŠãããšãã§ããŸãã
ç§ãã¡ã®èŠ³ç¹ããã¯ãé倱ã®è²¬ä»»ãæŸæ£ã§ããªãã®ãšåãããã«ãããŒãžã§ã³éã®ã©ã³ã¿ã€ã äºææ§ãæŸæ£ããããšã¯ã§ããŸããã
ãŸããMASSIVEã³ãã¥ããã£ã®åçºã«ããããããããªãã·ã§ã³ã®ãã§ãŒã³ã®æ©ææ¡çšã延æããŸããã誰ãããæã®åŸãã«çœ®ããŠãã ããããšèšããã³ã«ããã±ã«ãæã£ãŠããããããŒããããããå
¥åããŸãã ããããããã¯æ£ããããšã§ããããªããªãã (null)?.prop
äœãçæããããæšæž¬ããå¿
èŠãããã null
ïŒ undefined
ã§ã¯ãªãïŒã絶察ã«æšæž¬ããããã§ãã dãããç解ããããã«ãå¥ã®ç¶ç¶çãªè€éãã®è² æ
ãæ±ããŠçããŠããã 匷ãåäºå®ã¯èª°ã§æºãã300äžè¡ã®ã³ãŒãããŒã¹ã«ãã ãã£ãŠåº§ã£ãŠããªããšããäºå®ã®ããã«éããŸããã«ãããŸã?.
ã圌ããçç£ããããšã«äŸåããçšæ³null
ã«ãªãæ¹æ³ã§ãæã
å¥ã®undefined
åäœã«ç§»è¡ããæ¹æ³ãç解ããããšããã§ããŸãã
ãã«ãŒã ããŒã°ã¯ããã®æ©èœãå©çšããããšã«éåžžã«è奮ããTypeScriptã«è²¢ç®ããããšãç±æããŠããããããã©ã€ããŒããã£ãŒã«ããå®è£ ããŸããã ãã圌ãããã®ãããªç¶æ³ã«ãªãã£ãããä»ã®ãã¹ãŠãšåãããã«ãç§ãã¡ã¯èªåãã¡ã§ãã®æ©èœãå®è£ ããŠããã§ãããã
äžè¬ã«ãJavaScriptã®ã¿ã€ã ã©ã€ã³ã¯éåžžã«é·ããçŸå®çã«ã¯ã2020幎ã®æ§æã䜿çšããã«2016幎ã«åªãã人éå·¥åŠçJSãäœæã§ããã®ãšåãããã«ã2024幎ã®æ§æã䜿çšããã«2020幎ã«åªãã人éå·¥åŠçJavaScriptãäœæã§ããŸãã æçµçã«æ±ºå®ãããã»ãã³ãã£ã¯ã¹ããæã£ãŠããªãæ§æã䜿çšã§ããªãããšã«ãã£ãŠãã ãããããã¯ãããŸããã ãã®æç¹ã§ã¯ãããã¯åãªãæ¶ç©ºã®ããã°ã©ãã³ã°ã§ãã
ããã ãã§ãªããçŸåšã®ã¯ã©ã¹ãã£ãŒã«ãã®ææ¡ãšãã®ãã¹ãŠã®è©³çŽ°ãçŸåšã®åœ¢åŒã§ã¹ããŒãž4ã«å°éãããã©ããã100ïŒ ç¢ºå®ã§ã¯ãããŸããïŒç¹ã«ãææ¡ãå®å šã«ç Žæ£ããŠçœ®ãæããããšãæåããŠããTC39ã¡ã³ããŒäŒæ¥ããããŸãïŒå¥ã®ãã®ã§ïŒã 95ïŒ ã®ç¢ºå®æ§ããããšæããŸãããäžè¬çã«ãã¹ããŒãž3ã®ææ¡ãå®è£ ããããšã§ããå®å šã«ãªã¹ã¯ããªãããã§ã¯ãããŸããã ãã ããã¹ããŒãž3以éã«ããã«å€æŽãããå¯èœæ§ã¯éåžžã«äœããããçŸåšã®TSããªã·ãŒã¯é©åã ãšæããŸãã
[ã¯ã©ã¹ãã£ãŒã«ã]ã®ææ¡ãå®å šã«ç Žæ£ããŠå¥ã®ææ¡ã«çœ®ãæããããšãæåããŠããTC39ã¡ã³ããŒäŒæ¥ããããŸãã
èå³æ·±ãããšã«ããã€ã³ããã€ã³ãã¯ããã«ãªã³ã¯ããŠããŸããïŒ
ã¢ã€ãã¢ã¯æ¬¡ã®ãšããã§ãããããããTSããŒã ã¯ãã©ã°ã€ã³ã·ã¹ãã ãæ¹åããããã«æéãè²»ãããŠããã©ã°ã€ã³ã®äœæè ã«ã³ã³ãã€ã«æãšèšèªãµãŒããŒãããã³ã«ã®ã€ã³ããªã»ã³ã¹æéã®äž¡æ¹ã«ããã¯ããæ確ãªAPIãæäŸããããšãã§ããŸãã ããã«ããããµãŒãããŒãã£ãæ°ããæ§æãå«ãå®éšçãªæ©èœãå®è£ ããIDEãããã¹ããšãã£ã¿å ã§ã€ã³ããªã»ã³ã¹ãæ©èœãããããšãå¯èœã«ãªããŸãã
æåŸã«ç¢ºèªãããšããã ttypescriptã¯tsconfig.json
ã§éããã°ã©ã çã«TypeScriptãã©ã³ã¹ãã©ãŒããŒãæ§æããå¯äžã®æ¹æ³ã§ãããIDEã®ã€ã³ããªã»ã³ã¹ã«ããã¯ããªãããããµãŒãããŒãã£ãVSCodeã®ãããªæ¢åã®ããŒã«ã¯ãŸã ãããŸããã ttypescript
åãæ¿ããŠãVS Codeãæ§æãç解ã§ããããšã©ãŒãã¹ããŒããŠããéã¯ç«¯æ«åºåã«äŸåããå¿
èŠããããããVSCodeã®åªãããšã¯ã¹ããªãšã³ã¹ãæŸæ£ããããããŸããã
次ã«ãTypeScriptã¯å®å®ããæ©èœã«çŠç¹ãåããããµãŒãããŒãã£ã«å±éºãªå®éšçæ©èœãäœæãŸãã¯äœ¿çšãããããšãã§ããŸãïŒBabelãšã³ã·ã¹ãã ãšåããããç°¡åã§ãïŒã
èå³æ·±ãããšã«ããã€ã³ããã€ã³ãã¯ããã«ãªã³ã¯ããŠããŸããïŒ
https://github.com/microsoft/TypeScript/pull/30829#issuecomment -541338266
Babelãã©ã°ã€ã³ã§å®è¡ã§ããæ§æäžã®ããšã¯éåžžã«éãããŠããŸãã åºæ¬çã«ãããŒãµãŒã¯ãã§ã«ããããµããŒãããŠããå¿
èŠããããŸãã ããšãã°ã do
åŒã®ããã©ã°ã€ã³ãã«ã¯ãBabelèªäœã®ã³ã¢ã«ããžãã¯ãå¿
èŠã§ããhttps ïŒ
ãã©ã€ããŒãã¯ã©ã¹ã®ã¡ãœãããšã¢ã¯ã»ãµãŒã«ã€ããŠåŸãããšãã§ããåé¡ã¯ãããŸããïŒ
@RyanCavanaugh
ãããã®æ©èœã®äž¡æ¹ã«ã€ããŠãç§ãã¡ã¯æ®ãã®äººçã®éãããã§2ã€ã®åŸ®åŠã«ç°ãªãã³ãŒããã¹ãç¶æããããšã«åºå·ããã§ããã
ç§ã¯ããããã®ããã«é²ãã¹ãã§ã¯ãªããšæããŸãããããŠãããã³ãã¥ããã£å šäœãå·ã€ããããšãæ³åããããšãã§ããŸãã ãã³ã¬ãŒã¿ãã¹ããŒãž3ã«éããå Žåãæ°ããããŒãžã§ã³ã®ãã³ã¬ãŒã¿ã«ã¢ããã°ã¬ãŒãããããã®æéãæäŸããããšã¯åççã ãšæããŸãã ãã°ããã®éã¯äž¡æ¹ããµããŒãããå¯èœæ§ããããããŒãã¹ã€ãããäœæããŠTypeScript4 +ã§ã¬ã¬ã·ãŒãã³ã¬ãŒã¿ãåé€ããå¯èœæ§ããããŸãã å€ããã³ã¬ãŒã¿ãšæ°ãããã³ã¬ãŒã¿ã®éãã¯äœ¿çšããªãã®ã§ããããŸããïŒãŸããå®éšçãªæ©èœã§ãïŒã ããããææ¡ã圌ãã®ããŒãºãæºãããªãå Žåã圱é¿ãåãããããžã§ã¯ãã¯ææ¡ã«åãçµãã¹ãã ãšæããŸãã ããã¯èª°ã«ãšã£ãŠãè¯ãããšã§ãã TypeScriptã¯ãã¬ã¬ã·ãŒæ©èœãšå®éšçæ©èœã«ã€ããŠã®æŠäºãå·»ãèµ·ããã«ã¯ééã£ãå Žæã§ãã
ããã«çéžããããšãåŸæããŠããŸãïŒ/
@RyanCavanaugh
Babelãã©ã°ã€ã³ã§å®è¡ã§ããæ§æäžã®ããšã¯éåžžã«éãããŠããŸãã åºæ¬çã«ãããŒãµãŒã¯ãã§ã«ããããµããŒãããŠããå¿ èŠããããŸãã
NSã ãã ããTypeScriptãšæ¯èŒããããã«ãBabelã§ã¯ãããŒãµãŒã ãããã©ãŒã¯ããŠãã«ã¹ã¿ã ããŒãµãŒãšäœæããã«ã¹ã¿ã æ§æãã©ã°ã€ã³ã䜿çšããããã«babel.config.js
ãèšå®ã§ããŸãã ã¯ããããã¯å€ãã®äœæ¥ã§ãïŒç¹ã«ãæ°ããæ§æãåããŠè¿œå ããæ¹æ³ãåŠã¶ïŒããTSã®åçã®ãªãã·ã§ã³ãèªèããŠããŸããããã¡ãããBabelã§ã¯ãæ¢åã®æ§æã«åºã¥ããŠå€æãã©ã°ã€ã³ãäœæããæ¹ãã¯ããã«ç°¡åã§ãã TypeScriptã®ã«ã¹ã¿ãã€ãºãªãã·ã§ã³ã®çŸåšã®ç¶æ
ã¯ããããŸããããæ°å¹Žåã«æåŸã«èª¿ã¹ããšãããã¹ãŠããã©ãŒã¯ãã以å€ã«æ¡åŒµãããªãã·ã§ã³ã¯ãªãããã§ããã
ãããè©ŠããŠãã ããïŒ https ïŒ
ãã©ã€ããŒãIMOã®ããã·ã¥ã¯éããŠçŽããããã§ãã ãã以å€ã®æ¹æ³ã§ããããå®è£
ããæ¹æ³ããªããããããã¯é£ãã匷å¶ã§ãã TSã®ãããªãã«ãã¹ãããã¯ãããŸããã ãã®çµæãã³ãŒããã·ã³ãã«ã§è©°ãŸã£ãŠããŸãããããŒããã©ã€ããŒãããã»ãšãã©åŸããããããã©ã«ãã§ã¯ãã©ã€ããŒãã«ããå¿
èŠããããšå€ãã®äººãæããããŠãããããJSãæžããæ£ãããæ¹æ³ã ãšèããŠããŸãã
ç¹ã«åé¡ã«ã€ããŠæãããªæèŠã®äžäžèŽããã£ãå Žåã¯ããããæšæºã«ããã·ã¥ããåã«ãããå€ãã®ææ¡ããã£ãã¯ãã§ãã
@ robot56ã¯ãããã©ã«ãã§ã¯éå ¬éã«ããæããããŠããŸãããå®éã«ã¯èª°ã«ãšã£ãŠãè¯ãããšã§ã¯ãããŸããã
@ljharbã¯ãããããã¹ãã§ãã ãã ãããã©ã€ããŒãã宣èšããæ¹æ³ãå€æ°ã®åã«ããã·ã¥ã·ã³ãã«ãã¹ããŒããããã«ãªã£ãå ŽåãJSã§ã¯ã©ã¹ãäœæãããæ£ãããæ¹æ³ã¯ãã¡ã³ããŒå€æ°ã®åã«ããã·ã¥ãé
眮ããããã«äººã
ã«æããããšãæå³ããŸãã ãããã宣èšãããšãã ãã§ãªããããããåç
§ãããšããã ããªããä»ã®èšèªããæ¥ãŠãããªããããã¯ç¹ã«æ··ä¹±ããŸãã this.#x = this.#something();
ãããªãã®ãšã¯ã©ã¹ã§ã®å®£èšãèŠããšãã®ç§ã®æåã®èãã¯ãããã·ã¥ãå€æ°èªäœã®äžéšã§ãããšããããšã§ããã ç§ã¯ããã修食åã ãšã¯æããããŸããã§ããã ãããªãã¯ã®ã¢ã³ããŒã¹ã³ã¢ããããéã«æããŸãã ããã¯TSã«ã¯ããŸãé¢ä¿ãããŸããããç§ãæšæž¬ããåä»ãªæãã§ãã
ã¯ãã芪ãã¿ãããã«åºå·ãããšãã«æ°ããããšãåŠã¶ããšã¯èª¿æŽãããããŸããã JSã³ãã¥ããã£ã¯ãããããåŠã³ç¶ãããšä¿¡ããŠããŸãïŒ
ïŒããã·ã¥ã¯å€æ°èªäœã®äžéšã§ããã this.#x
ã®ååã¯ãxã§ã¯ãªããã©ã€ããŒããã§ãããå®éã«ã¯ããã®åå¥ã¹ã³ãŒãå
ã®äžæã®å€ã§ãã#x
ïŒ
ã¯ãã芪ãã¿ãããã«åºå·ãããšãã«æ°ããããšãåŠã¶ããšã¯èª¿æŽãããããŸããã JSã³ãã¥ããã£ã¯ãããããåŠã³ç¶ãããšä¿¡ããŠããŸãïŒ
ããªãã®èšãæ¹ã§ã¯ããããç§ãã¡ã®ããã°ã©ãã³ã°ã®ç¥æµã«è¿œå ããäœããåŠãã§ããããã«èãããŸãããããã¯JSã®ãã1ã€ã®çã§ãããèŠããŠããå¿ èŠããããŸãïŒD
æãåèã«ãªãã³ã¡ã³ã
ããã©ã€ããŒããã§ã¯ãªãããŒã¯ãŒãããŒã¹ã®ãœãªã¥ãŒã·ã§ã³ã«äººã ãæºè¶³ãããšã¯æããªãã