éšåã¯ã©ã¹ã®ãµããŒããè¿œå ããŸãã Mixinsã¯å®è¡æã®å®çŸã§ãããããåãã§ã¯ãããŸããã typescriptãjavascriptã«å€æããåã«ãéšåçãªã¯ã©ã¹ã1ã€ã«çµåãããã³ã³ãã€ã«ã®å®çŸãå¿ èŠã§ãã
//FileA.ts
partial class ClassA
{
constructor(public name: string) {}
public sayHello(): string { return "hi!"; }
}
//FileB.ts
partial class ClassA
{
public sayBye(): string { return "by!"; }
}
ã«ãªããŸãïŒ
partial class ClassA
{
constructor(public name: string) {}
public sayHello(): string { return "hi!"; }
public sayBye(): string { return "by!"; }
}
ã¢ãžã¥ãŒã«ã«ããéšåçããæ¡çšããããã§æèµ·ããããã®åé¡ã®è§£æ±ºã«åœ¹ç«ã€ãšæããŸãã
@disshishkovããããæ¡åŒµã¡ãœããã§ååã§ãïŒïŒ9
ãããã©ã®ãããªç¶æ³ã§äœ¿çšãããã®ã§ããããŸããæ¢åã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ã©ã®ããã«ãããéæã§ããŸãããã
ããã¯ãèªåçæããããã¡ã€ã«ãšåãã¿ã€ãã«å¯äžãããŠãŒã¶ãŒç·šéãã¡ã€ã«ãããWinFormsã¿ã€ãã®ç·šéã·ããªãªããµããŒãããããã«CïŒã§å®è£ ãããããšã«æ³šæããŠãã ããã ãã®ãããªç¶æ³ãJavaScript / TypeScriptã«åœãŠã¯ãŸããã©ããã¯ããããŸããã
äžéšã®ã¯ã©ã¹ã«ã¯å€ãã®è¡çªå·ãå«ããããšãã§ããŸãããèªã¿ãããããããã«ãããã€ãã®åå¥ã®ã¯ã©ã¹ã«åå²ãããšåœ¹ç«ã¡ãŸãã ããžãã¯ïŒãã®ããžãã¯ãå¥ã®ã¯ã©ã¹ã«ç§»åã§ããªãå ŽåïŒãå¯èŠæ§ïŒãã©ã€ããŒãããã³ãããªãã¯ïŒãªã©ãããŸããŸãªã¿ã€ãã§åå²ã§ããŸãã éšåã¯ã©ã¹ã®çµã¿åããã§åé¡ãçºçããå¯èœæ§ãããå ŽåïŒããšãã°ãåãã¡ãœãã/å€æ°å®£èšãšåã2ã€ã®éšåã¯ã©ã¹ïŒãã³ã³ãã€ã©ãŒã¯ãšã©ãŒãéç¥ããŠã¹ããŒããå¿ èŠããããŸãã
ããã¯æ¬åœã«é åçã§ã¯ãããŸããã ã¯ã©ã¹ãéåžžã«å€§ããããããµã€ãºãéåžžã«å€§ããããã«1ã€ã®ãã¡ã€ã«ã§å¿«é©ã«ç·šéã§ããªãå Žåãããã¯éåžžã«å€§ããªèšèšäžã®èãã§ãïŒããšãã°ãhttpïŒ//programmers.stackexchange.com/questions/157482ã®ã³ã¡ã³ãïŒã ç°ãªãã¿ã€ã/ããžãã¯/å¯èŠæ§ãªã©ã«ããåå²ã¯ãIDEãŸãã¯åäžã®ãã¡ã€ã«å ã®ç·šæã«ãã£ãŠåŠçã§ãããã®ã§ãã
ã¯ã©ã¹ã倧ããããŠããã²ãŒãã§ããªãçç±ïŒããã²ãŒã·ã§ã³ããŒã«ã®æ¹ãåªããŠããå¿ èŠãããããã§ããïŒïŒãããã³èšèªãã¯ã©ã¹ãåã«åå²ããã®ã§ã¯ãªããã¯ã©ã¹ãå解ããããšããµããŒãã§ããããè¯ãæ¹æ³ãããå Žåã¯ã説æãã䟡å€ããããŸãã
å人çã«ã¯ãéšåã¯ã©ã¹ãã¯ååšãã¹ãã ãšæããŸãããã¢ãžã¥ãŒã«å士ãèåããããã«æ¯ãèããŸãã ç§ã¯ã¢ãžã¥ãŒã«ãåããã·ã¹ãã ãæã£ãŠããŸãããã€ã³ããªã»ã³ã¹ã¯ãã¹ãŠã®ã¢ãžã¥ãŒã«ãïŒå¿ èŠã«å¿ããŠïŒèªèããŸããããããå«ãå®éã®JSã¯å¿ èŠãªå Žåã«ã®ã¿ããŒããããŸãã å¿ èŠãªããŒãã ããããŒãããã ãã§ãã¯ã©ã¹ã§ãåãããšãã§ãããšæããŸãã ãŸããé¢æ°ãäœæããã¯ã©ã¹ã䜿çšããŠããã«æ¡åŒµããããšæã£ãŠããŸããã çŸåšãããã¯ã¢ãžã¥ãŒã«ã§ã®ã¿å®è¡ã§ããŸãã
éšåã¯ã©ã¹ã®ãŠãŒã¹ã±ãŒã¹ã¯ãçæããããããã·ã¯ã©ã¹ã§ãã ããšãã°ãWebAPIãŸãã¯SignalRã©ãããŒã çæããããããã·ã¯ã©ã¹ãã«ã¹ã¿ã ããžãã¯ã§æ¡åŒµã§ãããšæ¬åœã«äŸ¿å©ã§ãã ç¹ã«ã¢ãã«ã®ã¯ã©ã¹ãçæãããšãã¯ãAPIããè¿ãããã¢ãã«ã¯ã©ã¹ã«ããžãã¹ããžãã¯ãçŽæ¥ã¢ã¿ããã§ãããšäŸ¿å©ã§ãã
+ 1kvantetoreã
ãŠãŒã¹ã±ãŒã¹ã¯.netãšãŸã£ããåãã§ãã ã¯ã©ã¹ã®äžéšãïŒãã®å Žåã¯Avroã¹ããŒãããïŒçæãããçæãããã¯ã©ã¹ãæäœããããã®ãã«ããŒã³ãŒããè¿œå ããå¿ èŠããããŸãã
ç§ã¯ãã®ææ¡ã奜ãã§ãã 1ã€ã®ãã¡ã€ã«ã«ãŸãšããããšãã§ãããããŒã¿éå±€ãã圢æããã¯ã©ã¹ã®å±æ§/ããããã£ããä»ã®ããã€ãã®ãã¡ã€ã«ã«åå²ã§ããã¡ãœããããåé¢ããããã«ãéšåçãªã¯ã©ã¹ãå¿ èŠã§ãã ããã«ãããã³ãŒããäžç®ã§ãããããããªããç解ãããããªããŸãã
ç§ã®ããŒã¿éå±€ãã¡ã€ã«ïŒ
class A {
x: number;
y: number;
z: number;
}
class B extends A {
value: string;
flag1: boolean;
flag2: boolean;
}
ã¯ã©ã¹Aã®ã¡ãœãããå«ããã¡ã€ã«ïŒ
class A {
constructor(x: number, y: number, z: number) {
this.x = x;
this.y = y;
this.z = z;
}
method1(...) { ... }
...
methodN(...) { ... }
}
ã¯ã©ã¹Bã®ã¡ãœãããå«ããã¡ã€ã«ïŒ
class B extends A {
constructor(x: number, y: number, z: number, value: string) {
super(x, y, z);
this.value = value;
this.flag1 = false;
this.flag2 = false;
}
method1(...) { ... }
...
methodN(...) { ... }
}
ç§ãã+1ã ttãã³ãã¬ãŒãã䜿çšããŠTypescriptã¯ã©ã¹ãçæãããã®ã§ããããã³ãã¬ãŒãçæã«ãã£ãŠçœ®ãæããããªãå¥ã®ãã¡ã€ã«ã«ããããè¿œå ããŸãã
+1ããã¯ãæ¡åŒµããå¿ èŠã®ããèªåçæãããã¯ã©ã¹ã§æ¬åœã«åœ¹ç«ã¡ãŸã
éšåã¯ã©ã¹ã¯æ¬åœã«çŽ æŽãããã§ããããããæã£ãŠããããšã¯æå³ããããŸããã ããã¯ããªãããã¶ã€ã³ã®åé¡ãæ±ããŠããããšã瀺ããŸããã ããã°ã©ãã³ã°ã®ååã¯ã䜿çšããèšèªã«é¢ä¿ãªããåçŽãªæãããä¿ã€ããšã§ãïŒKISSïŒã¯ã倧ããªã¯ã©ã¹ãå°ããªã¯ã©ã¹ã«åå²ããããšã§ã-1ïŒã¹ã¯ãªãããã¯ã©ã¹ã«åå²ããŠåŒã³åºãïŒä»ã®ã¯ã©ã¹ããããåŒã³åºãããšãã§ããŸãïŒãã€ãŒã«ãåçºæãã代ããã«ãããå°ããªã¯ã©ã¹ãïŒããŸãã¯2ïŒå解ããŠãæœè±¡/ã€ã³ã¿ãŒãã§ãŒã¹/ç¶æ¿/ä»®æ³ãªã©ãŸãã¯ããªã¢ãŒãã£ãºã ã«å€æããŸãã
ãã¹ãŠãå ¥ã£ãè»äž¡ããããšããŸãããã éšåã¯ã©ã¹ã¯æå³ããªãã代ããã«ãããè¡ãæ¹ãçã«ããªã£ãŠãããšããã§ãããã§è€éããšãªãŒããŒããããçºçããŸãã Engineã¯ã©ã¹ãTrannyã¯ã©ã¹ãDrivetrainã¯ã©ã¹ãDoorã¯ã©ã¹ãTireã¯ã©ã¹ãåå¥ã®ã¯ã©ã¹ãšããŠäœæããã¹ã¯ãªããããããã«ç§»åããŸããããããåŒã³åºããšãVehicleã¯ã©ã¹å ã§Vehicleãå®çŸ©ã§ããŸãã é·ãã¹ã¯ãªãããšã¹ã¯ãªããã®è€éãã軜æžããŸãã Doorã¯ã©ã¹ã«ãã£ãŠç°¡ç¥åã§ããDoorã¹ã¯ãªããããã¡ãã¡ã«ããããšã«æ°ä»ãå¯èœæ§ããããŸãã Interface / Abstract / Inheritance / Virtualã䜿çšããŠãVehicleã¯ã©ã¹ã®äžéšã®ã¹ã¯ãªããã®Doorã¯ã©ã¹å®çŸ©ãå€æŽã§ããŸãã
ãŸãããã®æ¹æ³ã§ã¯éçºæéãå°ãªããªãå¯èœæ§ãé«ããªããŸãã ç§ã¯ãã€ãŠãå€ãã®éšåã¯ã©ã¹ã䜿çšããASP.NET CïŒããã°ãæã£ãŠããŸããã éšåçãªã¯ã©ã¹ãå€ãããã®ã§èŠåŽããŸããããã©ãã«ããã®ãããããŸããã ããã¯ãããã°ã©ãã³ã°ã§GOTOããžãã¯ãæ±ããããªãã®ã§ãã æªãæªã!! ãã°ä¿®æ£ã®ããããæ£åžžã«äœæããããšããéšåçãªã¯ã©ã¹ã®å±±ã«åãããŠããŸã£ãããã«ã¹ã¯ãªãããã«ã¹ã¿ãã€ãºããããšãã§ããŸããã§ããïŒååãå€æŽãããè¡šçŸããããŸãïŒã
ç§ã®å¿ãã1ã»ã³ãã®èããšããŠãããèšãã ãã§ãã
@ fletchsod-developerïŒäžéšã®ç¶æ³ã¯ç¶æ¿ã«ãã£ãŠé©åã«åŠçãããŸããããã¹ãŠã§ã¯ãããŸããã ãŸããäžéšã®éçºè ã¯éšåçãªã¯ã©ã¹ã誀çšããå¯èœæ§ããããŸããããã¹ãŠã§ã¯ãããŸããã éšåã¯ã©ã¹ãéåžžã«äŸ¿å©ã§ãããšæãç¶æ³ãããã€ããããŸãããããããæ°ã«å ¥ããªãå Žåã¯ã䜿çšããå¿ èŠã¯ãããŸããã
@ jfrank14ã@basaratã«ããäžèšã®ææ¡ãšããŠã¯ãïŒ9ãããªãã®ããã«åäœããªãã®ã§ããããïŒ
// File1.ts
class Dog {
...
}
// File2.ts
extends class Dog {
woof() { /* ... */ }
}
@NoelAbrahams ããã¡ã€ã«å ã®file1ããå®çŸ©ã«ã¢ã¯ã»ã¹ã§ããŸããããã®éã¯ã§ããŸãããïŒ å å«é åºã«äŸåããªãéããããã¯ç§ã«ãšã£ãŠã¯åé¡ãããŸããã
çãããTSã®CïŒã§éšåã¯ã©ã¹ãæ€èšããããšãæ¬åœã«æãã§ããŸã...ç§ã«ãšã£ãŠå¯äžã®çç±ã¯ã³ãŒãçæã§ãããããCïŒã®éšåã¯ã©ã¹ã®èåŸã«ããäž»ãªçç±ã§ã...ç§ãã¡ã¯çŸåšå€ãã®TSã³ãŒãçæãè¡ã£ãŠããŸãããŸããŸãå€ãã®ããšãè¡ãããšãæåŸ
ããŠããŸã...çŸåšãã//
ãã«äŸåããå¿
èŠããããŸã
+ 1-èªåçæãããã¯ã©ã¹ã«æ©èœãè¿œå ããããã«ãããå®éã«äœ¿çšã§ããŸãã ãããŸã§ã«èãããèªãã ãã§ãããšã¬ã¬ã³ããªãœãªã¥ãŒã·ã§ã³ã¯ä»ã«ãããŸãã...
+ 1-ã³ãŒãã§çæãããã¯ã©ã¹ã ã¯ã©ã€ã¢ã³ãã«ã·ãªã¢ã«åãããCïŒ/ Javaãªããžã§ã¯ã
çæãããã¯ã©ã¹ã®ããŒãžã«ããããå¿ èŠã§ãïŒ
ããã¯ãçæãããã³ãŒããšçæãããŠããªãã³ãŒããç°¡åã«ããŒãžã§ããããã«ããããã®éåžžã«äŸ¿å©ãªæ©èœã§ãã
+1
+ 1-éšåçã«çæãããã¯ã©ã¹ã«ãå¿ èŠã§ãããã®ç®çã«ã¯å¿ èŠã®ãªãããªãã®ã³ãŒããçæããç¶æ¿ããããšã¬ã¬ã³ãã§ãã
+1
ãã®å¶éã«åã³ééããŸãã-ãã®æ©èœãè¿œå ããŠãã ããïŒ ïŒ+1ïŒ
+1
+1
+1
+1
人ã ã¯ã©ã³ãã ã«+1ããŸãããããã¯å ã«é²ã¿ãŸããã
ãããŸã§ã®ãŠãŒã¹ã±ãŒã¹ã¯æ¬¡ã®ãšããã§ãã
2çªç®ãš3çªç®ã®ãŠãŒã¹ã±ãŒã¹ã¯èª¬åŸåããªãã4çªç®ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãïŒ9ã®é ä¿¡ãéåžžã«é¡äŒŒããèŠä»¶ãããã«ã¯ãã³ã¬ãŒã¿ïŒïŒ2249ïŒãã©ã®ããã«æºãããªãããããçšåºŠèª¬æããå¿ èŠããããšæããŸãã
ïŒ9ã¯åãããšãéæããããã«äžè¬çã«ãªãããã«èŠããŸãïŒèªå以å€ã®ã¯ã©ã¹ãæ¡åŒµã§ããããïŒã ãã ããã¯ã©ã¹ã®ã³ã³ãã³ãã2ã€ã®ãã¡ã€ã«ã«å ¥ããŠïŒãããã1ã€ã¯ææžãã§ããã1ã€ã¯ãã³ãã¬ãŒãã«ãã£ãŠçæãããããïŒãäž¡æ¹ã®ãã¡ã€ã«ãã¯ã©ã¹ã®éèŠãªã¡ã³ããŒãåãéèŠåºŠã§å®çŸ©ããäžæ¹ãå¿ èŠãšããªããšèšãã®ã¯åççãããããŸããããã¡ã€ã«ã¯ãä»ã®ã¯ã©ã¹ã§å®çŸ©ãããŠããã¯ã©ã¹ããæ¡åŒµãããŸãã
ããã¯ã»ãšãã©å®åçãªéãã§ãããç¶æ³ã«ãã£ãŠã¯äžéšã®äººã«ãšã£ãŠã¯ããããéèŠã§ãã
è¿°ã¹ãããŠããçç±ã§ã¯ã©ã¹ãéšåçã«ãããã¯ãããŸããããã¢ãžã¥ãŒã«ã§ã¯ããã¯ç§èŠã«æå³ããããŸãã
éšåã¯ã©ã¹ã¯ããŠãŒã¹ã±ãŒã¹ãç¹æ®åããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã ããã¯ãOOPãã¿ãŒã³ã®éåã§ã¯ãããŸããããã³ãŒããââãã¥ã¡ã³ããé 眮ããæ¹æ³ã§ããã次ã®æ©èœãæäŸããŸãã
ç§ã¯ããžãã¹ããžãã¯ãšããŒã¿ã¬ã€ã€ãŒãå¥ã ã®ã¯ã©ã¹ã«åé¢ããããšãä¿¡ããŠãããç§ã¯äž»ã«ãããã®ã¬ã€ã€ãŒã§éçã¡ãœããã䜿çšããŠããŸãã ã³ãŒããå¢ããŠä¿å®æ§ãäœäžããå¯èœæ§ãããã®ãââãç§ã«ã¯ããããããŸããã
æ¡åŒµã¡ãœããã¯OOãã¿ãŒã³ã®åœ±é¿ãåããã³ã¢èšèªæ©èœã§ãããã³ã³ãã€ã«æã«åŠçãããŸãããéšåã¯ã©ã¹ã¯ãã³ã³ãã€ã«åã®æ®µéã§ã¹ããããããããã¥ã¡ã³ã/ã³ãŒãã¬ã€ã¢ãŠããåŠçããŸãã éšåã¯ã©ã¹ãæœè±¡ã¯ã©ã¹ãããã³æ¡åŒµã¡ãœããã«ã¯é¡äŒŒæ§ããããŸãããæ確ãªéãããããŸãã
ïŒ+1ïŒç¡å®³ãªãéšåã¯ã©ã¹ããTypeScriptã«ããããããã
éšåã¯ã©ã¹ã®ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯ã³ãŒãçæã§ããç§ã®ããŒã ã¯ããããã¡ã€ã«ã§ã¯ã©ã¹ã®äžéšãèªåçæããå¥ã®ãã¡ã€ã«ã§ã«ã¹ã¿ã ã¡ãœãããšããããã£ãæåã§è¿œå ã§ããå¿ èŠããããŸãã ãã®ãŠãŒã¹ã±ãŒã¹ã¯éžæããèšèªãšã¯ç¡é¢ä¿ã§ããããã @ RyanCavanaughãããã®çš®ã®ç¶æ³ãJavaScript / TypeScriptã«é©çšããããã©ããããããªããçç±ã¯å°ãæ··ä¹±ããŠããŸãã
ãã³ã¬ãŒã¿ãæ¡åŒµã¡ãœããããéšåã¯ã©ã¹ã»ã©ãšã¬ã¬ã³ãã«ã³ãŒãçæã®åé¡ã解決ããããšã¯ãªããããããã«ããªãã®è€éãããããŸãã
+1
+1
ã³ãŒãçæã®ç®çã§+1ã
CïŒç°å¢ã§ã¯ãCïŒã¯ã©ã¹ã®ãã©ã³ã¹ãã€ã©ãŒãTypeScriptã¯ã©ã¹ã«çµ±åãããšãã¯ã©ã€ã¢ã³ãåŽïŒå¥åTypeScriptã¯ã©ã¹ïŒãèªåçã«çæãããéšåã¯ã©ã¹ãèªåçã«çæãããããããµãŒããŒåŽãšã¯ã©ã€ã¢ã³ãåŽã®éã§ã¯ã©ã¹ã®2ã€ã®ç°ãªãå®çŸ©ãä¿æããå¿ èŠããªããªããŸãããã®åé¡ãèŠæ±ããŠããããšã¯ããã€ãã£ãTypeScriptã§éçºããªãããå¿ èŠã«å¿ããŠã«ã¹ã¿ãã€ãºã§ããããã«ããããšã§ãã
ã³ãŒãçæã·ããªãªã®å Žåã¯+1
+1ã¯ã³ãŒãçæã«éåžžã«åœ¹ç«ã¡ãŸã
ã³ãŒãçæã«ç¶æ¿ã䜿çšããŠã¿ãŸãããïŒ
ç¶æ¿ã¯ããåä»ã§ãããå€ãã®ãªãŒããŒãããããããŸãã
æã2015幎8æ10æ¥ã«ã¯ã10ïŒ09 AM Gorgi Kosevã®[email protected]ã¯æžããŸããïŒ
ã³ãŒãçæã«ç¶æ¿ã䜿çšããŠã¿ãŸãããïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/563#issuecomment -129468291
ã
ç¶æ¿ã¯åœ¹ã«ç«ããªãååã®çµåãäœæããŸã
ç¶æ¿ã¯ã次ã®çç±ã§ããã»ã©çŽ æŽããããã®ã§ã¯ãããŸããã
typescriptãcodegenããµããŒãããããã®éšåçãªã¯ã©ã¹ãæã£ãŠãããšèšã£ãŠããã®ã§ã¯ãªãã
ãã®éšåçãªã¯ã©ã¹ã¯ãç¶æ¿ã
æ§æã
@JoshMcCullough JSã®ç¶æ¿ãªãŒããŒãããã¯æå°éã§ãããéšåã¯ã©ã¹ããã
@ yahiko00ããã§è©±ããŠããã®ã¯ãã©ã®ãããªã圹ã«ç«ããªãååã®çµåãã§ããã 以äžã®2çªç®ãååŸããããã«å¿ èŠãªããšãåç §ããŠããŸããïŒæ¡åŒµã¯ã©ã¹ã®ååãããŒãã³ãŒãã£ã³ã°ããŠããŸãïŒïŒ
@hdachev
AFAIKããã¯ES7 +ã¬ãŒããŒã«ã¯ãããŸãããã ããã¯åé¡ãããããŸãã...
ãããã«ãããæ¢åã®ã¯ã©ã¹ã®ãããã¿ã€ãã«äœåãªãã®ãæ·»ä»ããããšã¯ãJavaScriptã§ã¯éåžžã«ç°¡åã§ããããŸã£ããçããããšã§ã¯ãªãã®ã§ããã®ããã®æ§æãçšæããããšããå§ãããŸã...
TSã§ã¯ç°¡åã§ãããèå°è£ã®JSã¯2åã«ãªããŸã
çæããããã¹ãŠã®ããŒã¿ã«åºæ¬ã¯ã©ã¹ã䜿çšããŠããå Žåã®ããããã¢ã€ãã³ã°ã
ãªããžã§ã¯ãã ããªããããããæã£ãŠããªãéããããããæ·±å»ãªããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯ãããŸãã
ããŒã¿ãªããžã§ã¯ãã§ããããéšåç
ã¯ã©ã¹ããå¯èœã§ãã
11:03 Gorgiã§æã2015幎8æ10æ¥ã«ã¯Kosev [email protected]
æžããŸããïŒ
@JoshMcCulloughhttps ïŒ//github.com/JoshMcCulloughç¶æ¿ãªãŒããŒããã
JSã§ã¯æå°éã§ãããéšåã¯ã©ã¹ãããåä»ã§ããããšãããããŸããã
ãããã䜿çšãããšãã¯ã©ã¹ã10åã®ãã¡ã€ã«ã«åå²ããŠã远跡ããããšãã§ããŸãã
ããããšããã«ã¡ãœããã@ yahiko00https ïŒ//github.com/yahiko00ã©ããªããã¡ãªååã
ã«ãããªã³ã°ãã¯ããã§è©±ããŠããã®ã§ããïŒããªãã¯ããªããå¿ èŠãšãããã®ãåç §ããŠããŸããïŒ
以äžã®2çªç®ãååŸããã«ã¯ã©ãããã°ããã§ããïŒæ¡åŒµã¯ã©ã¹ã®ååãããŒãã³ãŒãããŸãïŒïŒã¯ã©ã¹MyClassã¯GeneratedMyClassãæ¡åŒµããŸã{...}
@hdachev https://github.com/hdachev
1.1ã
ãªãŒããŒãããã¯ãããŸããããããããã§ãã
https://jsperf.com/prototype-chain-vs-direct-calls-ç®ç«ã€ã ã
ããã€ãã®ãã·ã³ã«çŽæ¥å€æãããããšãããŠããå Žå
æé
2.2ãè¯ãç¹-ããªããããªããã°ãªããªããšãã«ããªãã¯æ¡åŒµã¯ã©ã¹ãååŸããŸãã
çæãããã¯ã©ã¹ãä»ã®çæãããã¯ã©ã¹ããåç §ããŸãã
3.3ããããã®ã¯ã©ã¹ã¯ç¢ºãã«æ¡åŒµãããããšãæå³ããŠããŸã-ããã§ãªããã°ããªãã¯ããããããšãã§ããŸã
ããããçæããããã§å®äºããŸãããïŒAFAIKããã¯ES7 +ã¬ãŒããŒã«ã¯ãããŸãããã
ãããã«ãããæ¢åã®ã¯ã©ã¹ã®ãããã¿ã€ãã«äœåãªãã®ãæ·»ä»ãã
JavaScriptã§ã¯éåžžã«äºçŽ°ãªããšã§ããããŸã£ããçããããšã§ã¯ãªãã®ã§ã
ãã®ããã®æ§æãçšæããããšããå§ãããŸã...â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/563#issuecomment -129483174
ã
@ Davidhanson90ãã®ãã¡ã€ã«ã«ã¯ã¯ã©ã¹ããã
æ£ããã¹ã¬ããã«æçš¿ããŸãã https://github.com/Microsoft/TypeScript/issues/447
+1
+1
+100
+1
+1
ã³ãŒãçæã®å Žåã¯+1ã
ç§ã¯angularjsãšwebapiã䜿ãå§ããŠãããåºæ¬çã«cïŒãªããžã§ã¯ããšãµãŒãã¹ããèªåJSå®çŸ©ãäœæããããŒã«ãäœæããããšèããŠããŸãã 次ã«ããè¶³å Žãã®JSå®çŸ©ãç·šéããã«ããããã®ã¯ã©ã¹ãæ¡åŒµã§ããããã«ããããšæããŸãã ä»ã®äœäººãã®äººã
ããããèŠæ±ããŠããã®ãèŠãŸããããããŠç§éãåæ§ã®ãŠãŒã¹ã±ãŒã¹ãæã£ãŠããããã§ãã
ã³ãŒãçæã®+1
ã³ãŒãçæã®+ 1ãangularã«ã¯å€ãã®å®åã³ãŒããããããã§ã«å€ãã®çæãè¡ã£ãŠããŸãããéšåã¯ã©ã¹ã䜿çšãããšãããã«å€ãã®ããšãã§ããããã«ãªããŸãã
ã³ãŒãçæã®ããã«ããäžåºŠ+1ããŸãã å¥ã®ãã¡ã€ã«ã§ã¯ã©ã¹ãæ¡åŒµããããšãããšãããããé¢åã§ãã
@RyanCavanaugh ããããã+1ãã¢ãŒãããæãåºããçç£çãªæ¹åã«
-1次ã®æ§æã¯ããã¯ã¹ã€ã³ã«é©ããŠããŸãïŒïŒ2919
éšåã¯ã©ã¹ãšããã¯ã¹ã€ã³ã®äž¡æ¹ã䜿çšã§ããªãçç±ãããããŸããã 2ã€ã®ãŸã£ããé¢ä¿ã®ãªãæ©èœã
+1
ããã¯ã³ãŒããçæããããšãã«äŸ¿å©ã§ãããçæãããã³ãŒãã«äœããè¿œå ããããã«ã³ãŒããå€æŽããå¿ èŠã¯ãããŸããã
+1
ãããã®ãŠãŒã¹ã±ãŒã¹ã®äž¡æ¹ãæºããå¿ èŠãããææ¡ããããŸãã
ïŒ2ïŒã®å Žåãéåžžã¯::
æŒç®åã䜿çšããŠäžçœ®æ§æãååŸããŸãã
ãã ããå€ãã¯ã©ã¹ãæ°ããã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã«ãããå ŽåããŸãã¯åçã«ãã£ã¹ããããããå Žåã¯ãå®éã«ãããã¿ã€ããå€æŽããå¿ èŠããããŸãã
interface ITimes {
times(n: number): number
}
Array implements ITimes {
times(n: number): number {
return this.length * n
}
}
// The compiler should check that all methods of ITimes and IOther are implemented.
Number implements ITimes, IOther {
times(n: number): number {
return this * n
}
other(): void {}
}
// The old types should typecheck with the new interface.
const x: ITimes = true ? [] : 0
x.times(3)
// The interface list can be empty. This essentially gives you partial classes.
MyClass implements {
anotherMethod(): void {}
}
ïŒãã®äŸã§ã¯ãæååã¡ãœããåã䜿çšããŠããŸããããããã¯çµã¿èŸŒã¿åã§ãããããåãã§ãã¯ãå¯èœã«ãªãã°ãã·ã³ãã«ã䜿çšããæ¹ãé©åã§ããïŒ
ãããçã®éšåã¯ã©ã¹ãããåªããŠããç¹ã¯ãã¯ã©ã¹ã®å®çŸ©ã1ã€ã§ãããä»ã®å Žæã§ã¯ãããæ¡åŒµããã ãã§ãããšããããšã§ãã ããã¯ãã¯ã©ã¹ãã€ã³ããŒãããããã®æ確ãªå ŽæããããJSãžã®ç¿»èš³ã容æã«ããããšãæå³ããŸãã
ïŒ+1ïŒéšåçãªã¯ã©ã¹ãèŠããã§ãã
ãã®æ©èœã®ã¹ããŒã¿ã¹ã¯äœã§ããïŒ
ãã®ãŠãŒã¹ã±ãŒã¹ã®äŸïŒ
ã¯ã©ã¹Set
ãå®çŸ©ããMath
ããã±ãŒãžããããã¡ãœããSet#add
ã 'SetïŒremove'
// math.ts
export partial class Set {
add(){}
remove(){}
}
ã¯ã©ã¹Relation
ãšTuple
ãå®çŸ©ãããªãã·ã§ã³ã®éãRelational
ããã±ãŒãžããããŸãã
ãã®Relational
ããã±ãŒãžã¯ã Set#product
ã¡ãœãããè¿œå ããŸãã
// relational.ts
///<reference path="./../math/tsd.d.ts"/>
partial class Set {
product(){}
}
export class Relation(){}
export class Tuple(){}
éšåçãªã¯ã©ã¹ã䜿çšãããšãããæè»ãªæ¹æ³ã§ã¯ã©ã¹ãäœæã§ããŸãã éãrelational
ããã±ãŒãžã䜿çšããããªãå Žåã§ããåºæ¬çãªã»ããæ©èœã䜿çšã§ããŸãã ä»ã®partial
ã¯ã©ã¹ã¯å
¥ã£ãŠããŠãã¯ã©ã¹ã«æ©èœãè¿œå ããã ãã§ãã
ãã®å ŽåãããŒã·ã£ã«ã䜿çšããã«åªããAPIã䜿çšã§ããããã«ããããã«ãé ãæ©ãŸããŠããŸãã
ç§ãæã£ãŠæ¥ãããšãã§ããã®ã¯ãããã€ãã®ãªããžããªãã¿ãŒã³ã ãã§ãã
// Without partials
// base
export class Base {
static registerOperation(opName, method){
this.prototype[opName] = method;
}
operation(name, ...args){
return this[name].apply(this, args);
}
}
// math.ts
import {Base} from './base';
class Set extends Base{
// Define the methods here
add(){}
remove(){}
}
// Or here
Set.registerOperation("add", function(...){});
Set.registerOperation("remove", function(...){});
// relational.ts
import {Set} from './../math/math';
Set.registerOperation("product", function(...){});
// app.ts
import {Set} from 'math';
var set = new Set();
set.add // compiler error
set.remove // compiler error
set.product // compiler error
// have to use something like
set.operation("add", args);
// or
(<any>set).add(arg);
+1ç§ã¯t4ã䜿çšããŠWebApiãä»ããŠã¯ã©ã¹ãšãããã·ãçæããŠããŸãã èªåçæã¯typescriptã§åºã䜿çšãããŠãããšæããŸããèªåçæã«é¢ããŠã¯ãéšåçãªã¯ã©ã¹ãå¿ èŠã§ãã
ç¹ã«Reactã§åãã¯ã©ã¹ã®åŽé¢ãåå²ããã®ã«æé©ã§ã
+1
+1ã³ãŒãçæãšãã¯ã©ã€ã¢ã³ãåºæã®å±æ§ãæã€çŽç²ãªåå©çšå¯èœãªããŒã¿ãªããžã§ã¯ãã®å Žåã¯ãã¯ã©ã¹ã§å®çŸ©ããã®ã«é©ããŠããããå¥ã®ãœãŒã¹ã³ãŒãã§ç¶æããããããªæ€èšŒã®ããã®ãååãªåé¢ãã
éšåã¯ã©ã¹ã®ã³ãŒãçæã«ã¯+1ã䜿çšãããããã®ã¯ã©ã¹ã®è¿œå ã¡ã³ããŒãåå¥ã®ãã¡ã€ã«ã«ãã³ãã³ãŒãããŸãã
+1
+1ç§ã¯jsapiãµãŒãã¹ã«ã¡ãœããã®å€§èŠæš¡ãªããŒã¹ãæã£ãŠããŸããããã¯ãããããã¡ã€ã«ã«åå²ããã®ãæåã§ããããããã¯ããããã®ã¡ãœãããç解ããã®ãç°¡åã«ããŸãã
fb (facebook)
ãgq (google analytics)
ãªã©ã®APIãµãŒãã¹ã§ã¯ãéçºå
šäœã§äœ¿çšã§ãã1ã€ã®ã°ããŒãã«ã¯ã©ã¹ãŸãã¯ãªããžã§ã¯ããæäŸãããŸãã
+1
ãã®æ©èœã¯ç§ãã¡ã«ãšã£ãŠã倧ããªãã©ã¹ã«ãªããŸãã
ç§ãã¡ã¯ãããããã¿ã€ãã®ã¯ã©ã€ã¢ã³ããæ¥ç¶ãããããä»ããŠãµãŒããŒãšéä¿¡ã§ããããã«ãŠã§ã¢ãéçºããŸããã
ãµãŒããŒã«ãã£ãŠå ¬éãããŠãããã®ã«åºã¥ããŠãã¯ã©ã€ã¢ã³ãã³ãŒãã®äžéšãçæããŸãã
ãããŸã§ã®ãšããããã¹ãŠã倧äžå€«ã ã£ãã ãããä»ãç§ãã¡ã¯ãªããžã§ã¯ãã®ç°çš®ã³ã¬ã¯ã·ã§ã³ã転éã§ããããã«ããããšæã£ãŠããŸãïŒãã ãåãåºæ¬ã¯ã©ã¹ã䜿çšããŸãïŒã 転éããããªããžã§ã¯ãã¯ããµãŒããŒAPIã«åºã¥ããŠçæãããã³ãŒãã®äžéšã§ãã
ãã®å Žåãç¶æ¿ã®åãå©çšã§ããããã«ããããã«ã¯ãæœè±¡ã¡ãœãããéµãšãªããŸãã ããããç§ãã¡ã®éçºè ã¯çæãããã³ãŒãã«ã¡ãœãããè¿œå ããŸãããç§ã¯èª°ããçç±ãç¥ã£ãŠãããšæããŸã;ïŒ
ç§ãç解ããŠããéãïŒç§ã¯CïŒéçºè ã§ãïŒãããã§ææ¡ãããŠãããœãªã¥ãŒã·ã§ã³ïŒhttps://github.com/Microsoft/TypeScript/issues/9ïŒã§ã¯ãããã§ããŸããã
ãããã£ãŠãéšåçãªã¯ã©ã¹ã¯ç§ãã¡ã«ãšã£ãŠå®ç§ã§ãã ã¯ã©ã¹ãéšåçã«çæããéçºè ãããžãã¯ãã¡ãœãããè¿œå ããå¿ èŠãããå Žåã¯ãå¿ èŠã«å¿ããŠä»ã®éšåãäœæããã ãã§æžã¿ãŸãã
+1
+1ã¯ã³ãŒãçæã«éåžžã«åœ¹ç«ã¡ãŸã
ã¢ãžã¥ãŒã«ã®æ¡åŒµã¯ãåºæ¬çã«ç¹å®ã®æ©èœãšããŠã®ããã®å¿ èŠæ§ãåŠå®ããã®ã ãããã
çæãããã¯ã©ã¹ãããå Žåã¯ã次ã®ãããªããšãã§ããã¯ãã§ã...
import {MyClass} from "./MyClass.generated"
MyClass.prototype.partialMethod1 = function() {
return true;
}
MyClass.prototype.partialMethod2 = function(abc: string) {
this.doSomething(abc);
}
declare module './MyClass.generated' {
interface MyClass {
partialMethod1(): boolean;
partialMethod2(abc: string): void;
}
}
@disshishkovããã¯
Elephant-Vesselã«åæããŸãã éšåã¯ã©ã¹ã®æåã§äœæãããããŒãã¯ãçæãããããŒãããå¯èœãªéãç·©ãçµåããå¿ èŠããããŸãïŒTSã®èšèšæïŒã
@ david-driscollã«ããææ¡ã¯ãå€ãã®å Žåã«æ©èœããŸãã ããããç§ãç¥ãéãããããã¿ã€ãã¯å éšå€æ°ã«ã¢ã¯ã»ã¹ã§ããŸããã ããã«ãããã¯ã©ã¹ã®ã³ã¢éšåãçæããŠããã«ã¹ã¿ã ã³ãŒãã§ããããæ¡åŒµããã³ãŒãçæã³ã³ããã¹ãã§ã®ãã®ã¢ãããŒãã®æçšæ§ãå¶éãããŸãã
+1
@ david-driscollã¯ããã®æ©èœãè±ç³ããããã®åªããæ¹æ³ã®ããã«èŠããŸãã ïŒãã©ã€ããŒã/ä¿è·ãããããããã£ã«ã¢ã¯ã»ã¹ããæ©èœãè¿œå ããå¿ èŠããããŸãïŒã è€æ°ã®éšåçãªã¯ã©ã¹å®£èšã§äœãèµ·ããã®ã ãããïŒ ãããã®çžäºã®å¯èŠæ§ã¯ã©ããªãã§ããããïŒ
++ 1èªåçæãããã¢ãã«ãæ¡åŒµããããšãããšãéšåçãªæ¬ åŠãæ¬åœã«ç§ãå·ã€ããŠããŸãã
ããã§ã®ã¹ã³ãŒãã®å¯äžã®ãã®ã¯åºæ¬çã«@ david-driscollãææ¡ãããã®ã ãšæããŸã-æ°ããã¡ãœããïŒãããã¿ã€ãã«é 眮ãããïŒãšæ°ãã_non-initialized_ããããã£ïŒcodegenãæããªãïŒã宣èšã§ããŸãããæ°ããåæåãããããããã£ã¯å®£èšã§ããŸããïŒãããã¯ã³ã³ã¹ãã©ã¯ã¿codegenã«å¯äœçšãããããïŒã
å察祚ãæããŠãç§ã®ãã©ã³ã¹èªãèš±ããŠãã ãããéšåã¯ã©ã¹ã¯ãOOPã§é¿ããããªãç¥ã®ã¯ã©ã¹ãè€æ°ã®ãã¡ã€ã«ã«ãã£ã³ã¯ããŠã管çãããããããšããæããªè©Šã¿ã§ãïŒãã ããç¥ã®ã¯ã©ã¹ã§ãïŒã
OOPã§ã¯ããªãã®äººã ã«æªæ¥ã¯ãããŸããïŒããã«ããŠãç§ã話ããŠããããšãç¥ã£ãŠããŸãïŒ
FPã«æ¥ããšãCookieãšãåäžã®ã¯ã©ã¹ãªãã§ããã°ã©ã ãäœæããæ¹æ³ãããããã®ããã«ãªããŸãã
ãããã£ãŠãåºæ¬çã«ã¯ã interface A { method(): void } A.prototype.method = function() { };
ä»ããŠãããèš±å¯ããŸãã ãããç ç³ã«ææåããããšã¯ããŸãã«ãããçã«ããªã£ãŠããŸãã
ãã€ã¯ã·ã§ããããããšã®1ã€ã¯ãããŒã¯ãŒãpartial
ã§ãã ç°¡åãªæŽå²çããããïŒCïŒã§ã¯ã partial class
ã¯å
ã
extension class
ïŒ1ã€ãé€ããã¹ãŠã®å®£èšïŒã«ãªããŸãããã©ã®å®£èšãextension
ãšãã©ã®å®£èšãéæ¡åŒµå®£èšã«ãªããã 代ããã«ã_all_ã¯ã©ã¹ã«é
眮ããå¿
èŠã®ãã修食åpartial
ããããŸãã
ããã¯TypeScriptã®å Žåã§ã¯ãããŸããã ãããå察ã§ãã ããã§ã¯ã1ã€ã®ã¯ã©ã¹ïŒã_primary_宣èšããšåŒã³ãŸãããïŒã®ã¿ãã³ã³ã¹ãã©ã¯ã¿ãŒ/åæåãããã¡ã³ããŒãã£ãŒã«ããæã€ããšãã§ããŸãã äžæ¬¡å®£èšã¯æ°ãã修食åãååŸããŸããã ä»ã®ãã¹ãŠã®å®£èšïŒã_extension_宣èšããšåŒã³ãŸãããïŒã«ã¯ãéçãã¡ãœãããããã³åæåãããŠããªããã£ãŒã«ãã®ã¿ãå«ãŸããå Žåãããããã©ã€ããªã§ã¯ãªãããšã瀺ãããã«ããã€ãã®ä¿®é£Ÿåãä»ããå¿ èŠããããŸãã
çŸåšã®æè¯ã®æšæž¬ã¯
class Foo {
x = 6; // only legal to initialize here
constructor() { } // only legal to have constructor here
someMethod() { }
}
// vvvvvvvvv thoughts?
extension class Foo {
someOtherMethod() {
}
}
ïŒsparkles ïŒïŒ bike ïŒïŒ house ïŒïŒ sparklesïŒ
ãã€ã¯ã·ã§ãã£ã³ã°ã§ããããšãªããããšãããã¯ãå°æ¥ã®ECMAScriptæšæºã«å¹²æžããå¯èœæ§ãããããã«é¢ããïŒ311ã®ããã«ã²ã©ãé³ã«èãããŸãã ãªããããæ€èšãã䟡å€ãããã®ã«ãé©åãªããã¯ã¹ã€ã³ãµããŒããããã§ã¯ãªãã®ã§ããïŒ
ããŒã¯ãŒãextension
ãããšãæ¡åŒµã¡ãœãããšç«¶åã
@kitsonkããã¯ã¹ã€ã³ã®ææ¡ã«ã¯ãã£ãšå€ãã®æªè§£æ±ºã®è³ªåããããšæããŸãã ããã§ã®éšåçãªã¯ã©ã¹ææ¡ã¯ãTypeScriptã§ãã§ã«èš±å¯ãããŠãããã®ãäœç³»åãããã®ã§ãããæ§æç³è¡£æ§æãå«ãŸããŠããŸãïŒãã®æ©èœã¯ãæåéããæ¢åã®ãã®ãžã®æ§æã®åãããã³ã°ãšããŠå®è¡ã§ããŸãïŒã
@ Elephant-Vesseléšåã¯ã©ã¹ãçºçããå Žåãæ¡åŒµã¡ãœããã¯çºçããŠããªããšæããŸãã ã¯ã©ã¹ã¯ãå¶çŽãèæ ®ããŠæ¡åŒµã¡ãœãããæå³ããªãå¯äžã®å Žæã§ãããææ¡ãããES7 +ãã€ã³ãæŒç®åã¯ãæ¡åŒµã®ãããªæ§æã§éŽã¹ããããããã®ããè¯ãæ¹æ³ã§ãã
@RyanCavanaugh ïŒç§ã«ã¯ã1ã€ã®ã¯ã©ã¹ããã©ã€ããªã§ãä»ã®ã¯ã©ã¹ããã©ã€ããªã§ãªãããšãèŠæ±ããã®ã¯å°ãå¶çŽãããããã§ãã 1ã€ã®ãã¡ã€ã«ã«ã¯ã©ã¹ã®ãã¹ãŠã®ã¡ãœãããå«ãŸãããã1ã€ã®ãã¡ã€ã«ã«ãã¹ãŠã®ããããã£ãå«ãŸããããã«ã³ãŒããããŒãã£ã·ã§ã³åå²ããå Žåãã©ã¡ããæããã«ãã©ã€ããªã«èŠããŸããããªãéžæã匷å¶ããå¿ èŠãããã®ã§ããããã éèŠåºŠããã¹ãŠåãã§ãã³ã³ãã€ã©ãŒã«ãã£ãŠããŒãžãããããŒã·ã£ã«ãããæ¹ãã¯ãªãŒã³ã§ã¯ãããŸãããïŒ
@RyanCavanaugh ... cïŒãšãŸã£ããåãæ¹æ³ã§å®è¡ããŸã...ã³ãŒãçæã«æé©ã§ã...ããã¯ãcïŒã§è§£æ±ºããæ©èœã®äž»ãªåé¡ã§ãããšæããŸã...ç§ã®èšæ¶ã¯ãããŸãã§ãã...åé¡ã¯çºçããŠããŸãããäœå¹ŽãåããååšããŠãããããã«ãã¹ããè¡ââãããŠããŸã...
éšå/æ¡åŒµã¯ã©ã¹ã§ãã£ãŒã«ããåæåã§ããªãå Žåã¯ãCïŒã§éšåã¡ãœããã®ãã
public partial class MyGeneratedClass
{
partial void Initialize();
public constructor()
{
//...
this.Initialize();
}
}
public partial class MyGeneratedClass
{
partial void Initialize() { //... }
}
ãµãŒãããŒãã£ã®ã¯ã©ã¹ãéšåå/æ¡åŒµã§ããå¿
èŠæ§ã¯ã partial/extends
äžè¬çã«ãªãã·ã§ã³ã«ããããšã§éåžžã«ç°¡åã«ïŒïŒïŒè§£æ±ºã§ããŸãããéšåã¡ãœããã®äœ¿çšã«ã¯å¿
é ã§ãã
ããã¯ãç§ãã¡ãããã§æãã§ããã³ã³ã»ããã«ããã¡ããšããè¡šçŸåãšæäœåãããããããšãã§ãããšæããŸãã
ããã¯ã¹ã€ã³ãæ¢ããŠãã人ã
ãªããžã§ã¯ããããããŒã¶ã«ã
function enableBeingPositioned<a>(
// hypothetical syntax
something: a /* <-- before type */ => a & { x: number; y: number; } /* <-- after type */
): void {
something.x = 0;
something.y = 0;
}
let value = {};
value.x; // <-- should not typecheck
enableBeingPositioned(value);
value.x; // <-- should typecheck
Javaãªã©ã®èšèªã¯ãéšåçãªã¯ã©ã¹/æ§é äœãæäŸããŠããŸããã ããã¯CïŒã®ããããªæ©èœã§ãã ããã«è¡ãã«ã¯ãCïŒã®ãéšåã¯ã©ã¹/æ§é äœãã®æŠå¿µãå®å
šã«æš¡å£ããã®ãæåã®æ¹æ³ã§ãã
ã³ã³ãã€ã«åã®ã¹ãããã§ãTSã³ã³ãã€ã©ãæåã«å®è¡ã§ããããšã¯ãã¡ã¢ãªå
ã®éšåçãªã³ãŒããããã¯ãã¹ãããããŠãããéåžžã®ã³ã³ãã€ã«ãã€ãã©ã€ã³ã«ãŒãã«ç§»åããããšã§ãã ããã¯ãTypeScriptã®éšåã¯ã©ã¹æ©èœã®v1.0.0-preview1.0000
ã®è³æ ŒãåŸãã®ã«ååãããã»ã©ã§ãã
CïŒãæäŸããŠãããã®ä»¥å€ã®ãã®ã¯ãæ©èœãé²åããŠãã©ã€ã¢ã«/ãã¬ãã¥ãŒãããé·çããããšãã«ãåŸã®ããŒãžã§ã³ã§å°å
¥ã§ãããã®ã§ãã ã³ãŒããŒã±ãŒã¹ãšåæ§ã®çš®é¡ã®ãããŸããªãã®ã¯ãäžåºŠã«1ã€ãã€åå¥ã«è°è«ããããšãã§ããåŸã§ãã£ããïŒãã£ããã·ã¥ã«ã€ããŠå¿é
ããããšãã§ããŸã... IMOã
ãŸããéšåã¯ã©ã¹ãšæ¡åŒµã¯ã©ã¹ã®äž¡æ¹ãcïŒãšãŸã£ããåãæ¹æ³ã§å®è¡ããããšã«åæããŸãã
æ§æãšã»ãã³ãã£ã¯ã¹ã®èŠ³ç¹ããã¯ãã©ã¡ããæ©èœããã®ãæåã®æ¹æ³ã§ããïŒ
ããããã®ãŠãŒã¹ã±ãŒã¹ã«éåžžã«é©ããŠããŸãã éšåã¯ã©ã¹ã¯
çæãããã³ãŒãã®äœ¿ããããã æ¡åŒµæ¹æ³ã«ããã䜿ãããããåäžããŸã
ã€ã³ã¿ãŒãã§ã€ã¹ãæå®ããããžã§ããªãã¯ãããã³3çªç®ã«åäœããéçã¡ãœããã®
ããŒãã£ãŒã¿ã€ãã ã©ã¡ããæ¬åœã«ãã£ãããã§ãããããã§ã¯ãªãããšãèŠããŠãããŠãã ãã
åãæ©èœã§ãããäžèšã®æ§æãææ¡ãããŠãããããããã§ãããèšããŸãã
æ¡åŒµã¡ãœããã䜿çšãããšããããå®è¡ã§ããŸãïŒãã©ãŒãããã®æ¬ åŠã«ã€ããŠã¯ã
é»è©±ã§ã®å
¥åïŒïŒ
MyType []ãæ¡åŒµãã{
somethingSpecificToMyTypeïŒïŒ{...}
}
WeirdThirdPartyDatastructureãæ¡åŒµãã
ãã£ã¡ãäžç·ïŒïŒ { ... }
}
ã¢ã³ããŒã¹ã³ã¢ã®ãããªã©ã€ãã©ãªã䜿çšã§ããããã«ãªããªã©ããšããã
ãããããªãã§ãããã¯åºæ¬çã«ã®æ§æäžã®å©ç¹ã享åããããšãæå³ããŸã
å®éã«ããããæ±æããããšãªãçµã¿èŸŒã¿åãæ¡åŒµããŸãã
ãšãŠãç°¡åã§ã-2ã€ãåããã®ãšããŠæ±ãããšã¯ã§ããŸããããããã¯äž¡æ¹ãšãéåžžã«
ãã£ãããã§ãããåãã§ã¯ãããŸããã ç§ã¯å人çã«äž¡æ¹ãç§ãã¡ã«å
¥ãããã§ã
èšèªã
ã¡ãªã¿ã«ãã¡ãªã¿ã«ãå€ãã®äººã
ã³ãŒãçæãšãããå Žæããªãããšãçã«èª¬æããæºåãã§ããŠããŸã
åãããšãéæããããã®ããæ
£çšçãªæ¹æ³ããããããJavaScriptã§ã
ã³ãŒãçæãéåžžã«åœ¹ç«ã€2ã€ã®æ¹æ³ããããŸã
ç§ãä»åãçµãã§ãããããªãããžã§ã¯ãã
éšåçãªãã®ãçåã«æã£ãŠãã人ã®ããã®å¥ã®ãµã€ãããŒããšããŠ
ã¯ã©ã¹ã¯ãçæãããéšåãä¿æããããšã®äŸ¡å€ã§ããcodegenãšé¢ä¿ããããŸã
ã¯ã©ã¹ã®å¥ã®ãã¡ã€ã«ãžã®å€æã¯ããœãŒã¹ç®¡çèŠä»¶ã«ç±æ¥ããŸã-
çæããããã®ã¯éåžžãæ¥éã«å€åãããã«ãã¢ãŒãã£ãã¡ã¯ãã§ããã
ãªããžããªã«ã³ãããããããªãã
ç§ã¯ãCïŒãšåãããã«ããã®æŠå¿µã®ããç¥ããããè©Šè¡é¯èª€ãããã¢ãã«ã«å¿ããŠãããå®è£ ãããšããã¢ã€ãã¢ã奜ãã§ãã ãæš¡å£ãã«ã¯ããã€ãã®åŠå®çãªæå³åãããããŸãããã€ã³ããªãžã§ã³ãã«å®è¡ãããšå€§ããªäŸ¡å€ããããŸãã äžæ¹ããã€ã³ããªãžã§ã³ãã-ãã®äžéšã¯ããŸããŸãªç¶æ³ãšå¶éãèªèããããšã§ãããããTypeScriptã®ããŒã·ã£ã«ãCïŒã®ããŒã·ã£ã«ãšæ£ç¢ºã«äžèŽããªãå Žåã¯æè°ããŸããã
@ Elephant-VesselãCïŒããŒã·ã£ã«ã®åãã³ããŒã§ããå¿
èŠã¯ãªãããšã«åæããŸããäžè¬çãªãã¶ã€ã³ã¯ãCïŒããŒã·ã£ã«ããæ倧éã®ã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãªãããTypeScript / JavaScriptãã¬ãŒããŒãäžå¿ã«æåã«äœæããŠã¬ã€ã¢ãŠãã§ããŸãã ç§ã®ææ¡ã¯ãæåã®ã¹ããããšããŠã partial
ããŒã¯ãŒãã®ç»é²ããšãããŒã·ã£ã«ã®ã¹ããããã䜿çšãããããå®éš/ãã¬ãã¥ãŒæ©èœãšããŠåºè·ããããšã§ãïŒãããã£ãŠãæ¶è²»è
ã¯æ¬çªã³ãŒãã§ããã«äŸåãå§ããŸããïŒãããããïŒã åŸã§ãã³ãã¥ããã£ã®åå¿ã«åºã¥ããŠã補åã®æºåãæŽããRTMãå®è¡ããããŸã§æ©èœãé²åãããŸãã ããããçš®é¡ã®ããªãããŒãªèœãšãç©Žãã·ããªãªãäºåã«å¿é
ããŠããå Žåãããããããã¯åé¡ãããã«é
ãããã§ãããã
+ 1-çæããããªããžã§ã¯ããæ¡åŒµããã³ä¿å®ããŸãã
çæãããã³ãŒããç¶æããããã®+1
ããªãã£ã«ãäœæãã倧ããªã¯ã©ã¹ãåå²ããŸããã
ã¯ã©ã¹ãã€ã³ã¿ãŒãã§ãŒã¹ãšããŠå®çŸ©ããŸãã
export class C {
constructor() {
}
}
export interface C {
m(): void;
}
ã¯ã©ã¹ã¡ã³ããŒãå®è£ ããŸãã
export default class extends C {
m(): void {
}
}
å®è£ ãããŒãžããŸãã
import {C} from './core';
import m from './member/m';
compose(C, m);
export {C}
import {assign} from './assign';
import {concat} from './concat';
export function compose<T extends new (...args: any[]) => any>(target: T, ...sources: T[]): T {
return concat([target], sources)
.reduce((b, d) => {
void assign(b.prototype, d.prototype);
for (const p in d) if (d.hasOwnProperty(p)) b[p] = d[p];
return b;
});
}
https://github.com/falsandtru/spica/commit/a6ff30da5319db5f25f703a29da48fc0f7dbe2fe
ããã¯1ã€ã®ç¹å®ã®çç±ã§ã²ã©ãèãã ãšæããŸããããã¯ãã°ããŒãã«ãã¢ã³ããšã³ããå€éšãåå空éãããã³è匱ãªå®£èšé åºã«äŸåããç¶æ¿ã®åé¡ã«å¯Ÿãããã§ã«è€éãªã«ãŒã«ãå€§å¹ ã«æªåãããã§ãããã ããã¯CïŒã§ã¯ãªããåå解決ãšã¡ã³ããŒå®£èšã¯å€§ããç°ãªããŸãã
ãããããã¯ã©ã¹ã®ä»£ããã«ãªããžã§ã¯ããŸãã¯åå空éã䜿çšããŸããæ¬åœã«ãããè¡ãå¿ èŠãããå Žåã¯ãã¢ãžã¥ãŒã«ãã¿ãŒã³ãæããã«ããŸãã ãã以å€ã®å Žåã¯ãã¯ã©ã¹ã倧ããããå¯èœæ§ããããŸãã
ãŸãããã³ã¬ãŒã¿ã䜿çšããŠãçæãããã³ãŒããšææžãã®ã³ãŒãã®éã®é¢é£ä»ããå®è£ ã§ããŸãã
ä»ã«è§£æ±ºçã¯ãããŸããïŒ
ãããTSã«è¿œå ããŠã»ããã§ã
ã³ãŒãçæã®ç®çã§+1ïŒè¿œå ã®éšåã¯ã©ã¹å®çŸ©ãå«ãWCFãµãŒãã¹åç §ããã®DTOïŒ
ã³ãŒãçæã®ç®çã§+1ã ç§ã®ãŠãŒã¹ã±ãŒã¹ã¯æ¬¡ã®ãšããã§ãã render()
é¢æ°ãreact-templatesãä»ããŠå€éšã§çæãããReactã³ã³ããŒãã³ãããããŸãã
partial
ã¯ã©ã¹ã䜿çšãããšããã®ãããªé¢æ°ãšã¡ã€ã³ã¯ã©ã¹ïŒ Component
ïŒã®ã¿ã€ããã§ãã¯ãè¡ãããšãã§ããŸãã éšåã¯ã©ã¹ããªããã°ãç§ã«ã§ããããšã¯ãé¢æ°ãã¡ã€ã³ã¯ã©ã¹ã«ãã€ã³ãããæé«ã®ãã®ãæåŸ
ããããšã ãã§ãã
次ã®TS2.0ã§ã¯ãã³ãŒãçæã®äžéšã®ã±ãŒã¹ãthis
ã¿ã€ãã®æ©èœã§ã«ããŒãããå¯èœæ§ããããšèããŠããŸããã
ããšãã°ãåã«èª¬æããå Žåã§ã¯ãªãã
partial class MyComponent extends React.Component<any,any> {
render() {
...
}
}
ç§ã¯æžãããšãã§ããŸã
function render<this extends MyComponent>()
...
}
MyComponent.prototype.render = render;
+1éçºè ãšããŠãè€æ°ã®ãã³ãã¬ãŒããè€æ°ã®ãã¡ã€ã«ã«åæ£ããåãã¯ã©ã¹ãçæ/å€æŽã§ããããã«ãéšåçãªã¯ã©ã¹ãå¿ èŠã§ãã
ç§ã®ã³ã¡ã³ãã¯ãããã¯ã¹ã€ã³ã§ã¯ãªããéšåçãªã¯ã©ã¹ã«é¢ãããã®ã§ããã ãã®2ã€ã¯æ ¹æ¬çã«ç°ãªããŸãã éšåã¯ã©ã¹ã¯ç©çã³ãŒããåå²ããããšã§ãããããã¯ã¹ã€ã³ã¯è«çåäœãåå©çšå¯èœãªç¹æ§ã«åå²ããããšã§ãããã¿ã€ãã¬ãã«ãšå€ã¬ãã«ã®äž¡æ¹ã§ä»ã®ãªããžã§ã¯ãã匷åããŸãã
TypeScriptã«ãšã£ãŠéšåã¯ã©ã¹ã¯è¯ãèãã§ã¯ãªããšæããŸãã äžæ¹ãããã¯ã¹ã€ã³ã¯è¯ãã¢ã€ãã¢ã§ããã@ aleksey-bykovãææããŠããããã«ãTypeScriptã®åã·ã¹ãã ãšJavaScriptã€ãã£ãªã ã®äž¡æ¹ã§è¡šçŸåãé«ããã¡ãã·ã¥ãéåžžã«ããŸãã¡ãã·ã¥åã§ããŸãã
@wendellmã¯ãESã¢ãžã¥ãŒã«ãç©ççã§ããããšãèãããšããããè¡ãããã®ã¯ãªãŒã³ãªæ¹æ³ãèããããšãã§ããŸãã éšåã¯ã©ã¹ã¯ããŸãæ©èœããã¢ãžã¥ãŒã«ãç©ççã§ã¯ãªãè«ççã§ããCïŒã®ãããªèšèªã§éåžžã«æå³ããããŸãã CLRã®èŠ³ç¹ããã¯ãåå空éã¯ååšããŸãããã¯ã©ã¹åã«ããããå«ããããšãã§ããã ãã§ãïŒ@ahejlsbergãžã®ã€ã³ã¿ãã¥ãŒãåç §ïŒ
+1éšåã¯ã©ã¹ãå¿ èŠã§ãïŒ
ã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµã§ããŸããïŒ ã€ã³ã¿ãŒãã§ã€ã¹ã«ã¯ãSwiftã®ããã«ãããã€ãã®å®è£ ãããé¢æ°ãå«ããããšãã§ããŸãã
interface Rect {
x: number
y: number
}
extension Rect {
area() => this.x * this.y
}
SwiftããŒãžã§ã³ïŒ
protocol Rect {
var x: Float {get}
var y: Float {get}
}
extension Rect {
func area() -> Float {
return self.x * self.y
}
}
+1
ã³ãŒãçæãšéšåã¯ã©ã¹ã¯å¯æ¥ã«é¢é£ããŠããŸãã
ç¶æ¿ã¯ãæ¬è³ªçã«æ å
ã®#include
ãã£ã¬ã¯ãã£ãã§ãããã®ã«å¯Ÿããäžååãªè§£æ±ºçã§ãã
Angular2ãäŸã«ãšã£ãŠã¿ãŸãããã 芪ã¯ã©ã¹ããã¡ã¿ããŒã¿ã
@tsvetomirã¯ãTypeScriptã®åé¡ã§ã¯ãªãAngularã®åé¡ã§ãã
ç¶æ¿ã¯ãæ¬è³ªçã«æ å ã«æºã¡ã#includeãã£ã¬ã¯ãã£ãã«å¯Ÿããäžååãªè§£æ±ºçã§ã
ã¯ããç¶æ¿ã¯äžååãªè§£æ±ºçã§ãããåé¡ã¯ããããã¯ã©ã¹ã䜿çšããããšã§ãã 圌ãã¯åœŒãã®å Žæãæã£ãŠããŸãããããã¯éåžžã«éãããŠããŸãã JavaScriptã¯ã©ã¹ã¯ãä»ã®èšèªã®ã¯ã©ã¹ãšæ¯èŒããŠããªã匱ããè¡šçŸåããããŸããã
Typescriptã¯ãAngularãèšèªã§ã¯ãããŸãã...
21:46ã«2016幎7æ23æ¥ãäžãAluanãããã< [email protected] [email protected] >æžããŸããïŒ
@tsvet omirhttpsïŒ//github.com/tsvetomirããã¯TypeScriptã®åé¡ã§ã¯ãªãAngularã®åé¡ã§ãã
ç¶æ¿ã¯ãæ¬è³ªçã«æ å ã«æºã¡ã#includeãã£ã¬ã¯ãã£ãã«å¯Ÿããäžååãªè§£æ±ºçã§ã
ã¯ããç¶æ¿ã¯äžååãªè§£æ±ºçã§ãããåé¡ã¯ããããã¯ã©ã¹ã䜿çšããããšã§ãã 圌ãã¯åœŒãã®å Žæãæã£ãŠããŸãããããã¯éåžžã«éãããŠããŸãã JavaScriptã¯ã©ã¹ã¯ãä»ã®èšèªã®ã¯ã©ã¹ãšæ¯èŒããŠããªã匱ããè¡šçŸåããããŸããã
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/Microsoft/TypeScript/issues/563#issuecomment -234753589ã§è¡šç€ºããããèªã¿åãããã¥ãŒãããŸã
ç§ã¯ãã®åé¡ãAngularåºæã®ãã®ãšã¯æ±ºããŠèããŠããŸããã ããã¯ãéšåçãªã¯ã©ã¹ã圹ç«ã€å¯èœæ§ãããç¹å®ã®ã±ãŒã¹ã§ãã
ãã®ãªã¯ãšã¹ãã¯ãCïŒã®éå»ã®çµéšãšäœ¿ãæ £ããæ©èœã®æ¬ åŠã«èµ·å ããŠããŸãã TypeScriptã¯.NETããè·é¢ã眮ããªããããæ¯èŒã¯é¿ããã
ãã®ãªã¯ãšã¹ãã¯ãCïŒã®éå»ã®çµéšãšäœ¿ãæ £ããæ©èœã®æ¬ åŠã«èµ·å ããŠããŸãã TypeScriptã¯.NETããè·é¢ã眮ãåªåãããªããããæ¯èŒã¯é¿ããããŸããã ãŠãŒã¶ãŒã¯ãäœããã®åœ¢ã®æ©èœã®åçæ§ãæåŸ ããŠããŸãã
@tsvetomirã¯ãé·å¹Žã®.NETéçºè ãšããŠããããŠæ ç±çãªCïŒããã°ã©ããŒãšããŠãæ ¹æ¬çã«åæããŸããã
ããªããåŒçšããèšäºã¯ä¿¡é Œã§ãããã®ã§ã¯ãªããTypeScriptããŒã ã®å ¬åŒè³æãåæ ããŠããŸããã
ããã«ã @ ahejlsbergãå€æ°ã®è¬æŒãã€ã³ã¿ãã¥ãŒãæçš¿ã§è¿°ã¹ãTypeScriptã®èšèšå²åŠãšçŽæ¥ççŸããŸãã
ããã«ãåŒçšãããèšäºã®èŠç¹ã¯ãTypeScriptã®æ§è³ªã«é¢ããæ ¹æ¬çãªèª€è§£ãåæ ããŠããŸãã
ç®èãªããšã«ãCïŒãTypeScriptãšå
±éããŠããã®ã¯ãå®éã«ã¯JavaScriptãšåãã§ãã
ãããã®å
±éç¹ã¯ã¯ã©ã¹ããŒã¹ã®ããã°ã©ãã³ã°ã§ã¯ãªããã¯ããŒãžã£ãé«éé¢æ°ãªã©ã®æ§ææŠå¿µã§ãã
CïŒã§ããããšãªããããšãTypeScriptãJavascriptã®ãããã¿ã€ãæ©èœã«è¿ã¥ãã®ã«åœ¹ç«ã€éšåçãªã¯ã©ã¹ãå¿ èŠã§ãã
@ yahiko00
TypeScriptã«ã¯ãJavaScriptã®ãããã¿ã€ãæ©èœããã¹ãŠå«ãŸããŠããŸãã
ã¹ãŒããŒã»ããã§ãã
TypeScriptã®éšåã¯ã©ã¹ã®æŠå¿µã«ã¯ã次ã®ãããªããã€ãã®åé¡ããããŸãã
_app / my-class-part-1.ts_
TypeScript
export partial class MyClass {
firstName = "John";
lastName = "Smith";
}
ãš
_app / my-class-part-2.ts_
TypeScript
export partial class MyClass {
fullName = this.firstName + ' ' + this.lastName;
}
ãã®ã¯ã©ã¹ãã€ã³ããŒãããã«ã¯ã©ãããã°ããã§ããïŒ ã©ã¡ãã®ã¢ãžã¥ãŒã«ãããã€ã³ããŒãã§ããªãã®ã§ãTypeScriptã§ä»®æ³çãªæœè±¡åãæ³åããŠã¿ãŸãããã
_app / main.ts_
TypeScript
import { MyClass } from './my-class';
ããã¯ã©ãããæå³ã§ããïŒ TypeScriptã³ã³ãã€ã©ã_app / my-class-part-1.ts_ã_app / my-class-part-2.ts_ã®åã«ããŒãããå¿ èŠããããšæšæž¬ã§ãããšããŠããåã ã®ããŒãã®ã€ã³ããŒããç¡å¹ã«ããããšããä¿èšŒããããšãã§ããŸããããããã¯ãRequireJSãªã©ã®éåæã¢ãžã¥ãŒã«ããŒããŒãŸãã¯æçµçã«ãã©ãŠã¶ãŒã«å®è£ ããããã®ã«ãã£ãŠæ£ããé åºã§ã€ã³ããŒããããŸãã
éšåã¯ã©ã¹ã®æŠå¿µå šäœã¯ãåºæ¬çã«ECMAScriptã¢ãžã¥ãŒã«ã·ã¹ãã ãšå¯Ÿç«ããŠããŸãã
æŽæ°ïŒä»»æã«è€éãªäŸåé¢ä¿ã®æšè«ãå®è¡ããéåžžã«å¥åŠãªJavaScriptãåºåããå¿ èŠããããŸãã
TypeScriptã«ã¯ãJavaScriptã®ãããã¿ã€ãæ©èœããã¹ãŠå«ãŸããŠããŸãã
ã¹ãŒããŒã»ããã§ãã
ãã£ãšèªåãè¡šçŸãã¹ãã ã£ãã ãã¡ãããTypeScriptãJavaScriptã®ã¹ãŒããŒã»ããã§ããããšã¯èª°ããç¥ã£ãŠããŸãã ããããéšåã¯ã©ã¹ã¯TypeScriptã¯ã©ã¹ãJSãããã¿ã€ãã«è¿ã¥ãã®ã«åœ¹ç«ã€ãšèšãããã£ãã®ã§ãã ä»ã®ãšããããéçãã§æ¡åŒµäžå¯èœãªã¯ã©ã¹ã䜿çšã§ããŸããããããã¿ã€ãã¢ãããŒãã§ã¯ãã¯ã©ã¹ã®ãããªé¢æ°ãæ¡åŒµã§ããŸãã
éšåçãªã¯ã©ã¹ãã€ã³ããŒããããšãç§ãåæããçŸåšã®ES6æ§æãæ¡åŒµãããŸãã ç§ãã¡ã¯ãã®ãããªãã®ãæ³åããããšãã§ããŸãïŒ
import { MyClass } from ['app/my-class-part-1', 'app/my-class-part-2'];
TypeScriptã¯ã©ã¹ã¯ECMAScriptã¯ã©ã¹ã«åºã¥ããŠãããããECMAScriptã¯ã©ã¹ã®è¡šçŸåã®æ¬ åŠã«æ©ãŸãããŠããŸãã é¢æ°ãã¢ãžã¥ãŒã«ããåå空éãããŸãã¯ãã¬ãŒã³ãªããžã§ã¯ãã䜿çšããŠãå¿ èŠãªããšãå®è¡ããããšãæ€èšããŠãã ããã
é¢æ°ã¯ãã¯ã©ã¹ã®æŠå¿µã§é¿ããããã®ã§ãã
ã¢ãžã¥ãŒã«ãŸãã¯åå空éã¯åçŽãªæ¡åŒµæ§ããããããTypeScriptã®ã¯ã©ã¹ãšåãè¡šçŸåãæã£ãŠããŸããã ãŸããåå空éãŸãã¯ã¢ãžã¥ãŒã«ãã€ã³ã¹ã¿ã³ã¹åããããšã¯ã§ããŸããã ãããã¯ã¯ã©ã¹ãšåãç®çãæãããŸããã
@aluanhaddadã¢ãžã¥ãŒã«ã«é¢ããŠããªããäœãæå³ããã®ãexport partial class
ã«èš±å¯ããæ®ãã®ãã¡ã€ã«ã«ã¯partial class
å®çŸ©ã®ã¿ãå«ããããšã§ãã ãšã¯ã¹ããŒãããå Žæããã€ã³ããŒãããŸãã ããªãã®äŸããïŒ
_app / my-class.ts_
export partial class MyClass {
firstName = "John";
lastName = "Smith";
}
_app / my-class.part.ts_
partial class MyClass {
get fullName(): string {
return this.firstName + ' ' + this.lastName;
}
}
_app / main.ts_
import { MyClass } from './my-class';
äžè¶³ããŠããã®ã¯ãã³ã³ãã€ã©ã«ããŒãã®å Žæãç¥ãããããã®æ§æã§ãã ããã¯ããã¹ãŠã®ãã¡ã€ã«ãäžåºŠã«åŠçããCïŒã®åé¡ã§ã¯ãããŸããã ããã¯ã宣èšã®ããŒãžã«äœ¿çšãããæ§æã®ããã«ãç¹å¥ãªæ§æã§ããå¯èœæ§ããããŸãã
éšåã¯ã©ã¹ã§ä»»æã®å®çŸ©ãèš±å¯ããå¿ èŠã¯ãããŸããã ããšãã°ãã¡ãœãããããããã£ãã³ã³ã¹ãã©ã¯ã¿ãŒã«ã®ã¿å¶éã§ããŸãã ããã«ãããå®è¡é åºãéèŠã§ãªããªããã¡ã³ããŒãéè€ããŠããå Žåã«ã³ã³ãã€ã©ãŒããšã©ãŒãã¹ããŒã§ããããã«ãªããŸãã
ã¢ãžã¥ãŒã«æ¡åŒµããããã®ã·ããªãªã«ç¡å¹ã§ããçç±ãããããŸããã Rxjs5ã§ã¯éåžžã«ããŸãæ©èœããŸããã
åºæ¬ã¯ã©ã¹ãäœæããã³ãŒãçæã䜿çšããŠãåºæ¬ã¯ã©ã¹ã®äžã«å¿ èŠãªãã¹ãŠã®æ¡åŒµã¡ãœãããçæããã ãã§ãã çæãããã³ãŒãããããã§ãããã©ããã¯é¢ä¿ãããŸããã人éããããæžãããšã¯æ³å®ãããŠããŸããã
éšåã¯ã©ã¹ã®å®å šãªä»£æ¿åã§ããïŒ ããã§ã¯ãªããšæããŸãããJavaScriptãå¿ èŠã ãšECMAScriptãå€æããªãéããéšåçãªã¯ã©ã¹ãçºçããããšã¯ãããŸããã éšåã¯ã©ã¹ãå€éšã¢ãžã¥ãŒã«éã§ã©ã®ããã«ãªã³ã¯ãããŠãããã«ã€ããŠã®ã»ãã³ãã£ã¯ã¹ã ãã§ããé ãçããªããŸãã
@ david-driscollãããã«æ¹åããããã«ãè¿œå ãããã¡ãœããã§this:
åŒæ°ã宣èšããŠããã匷åãªåãã§ãã¯ãè¡ãããšãã§ããŸãã
ã¢ãžã¥ãŒã«æ¡åŒµã®åŒçšäŸã§ã¯ïŒ
// observable.ts stays the same
// map.ts
import { Observable } from "./observable";
declare module "./observable" {
interface Observable<T> {
map<U>(f: (x: T) => U): Observable<U>;
}
}
Observable.prototype.map = function (this: Observable, f) {
// here "this" has the shape of the "Observable" class
}
ããã Rxjsã¯2.0ã®æ©èœã§ããã2.0ã¯ãŸã ãªãªãŒã¹ãããŠããªãããããŸã éãã«äœ¿çšããŠããŸããã åŸã§ããããªã¹ãã«èŒã£ãŠããŸãã
ã¢ãžã¥ãŒã«ã«é¢ããŠããªããäœãæå³ããã®ãããããŸãã èãããã解決çã¯ããã¡ã€ã«ã®1ã€ã ãã«éšåã¯ã©ã¹ã®ãšã¯ã¹ããŒããèš±å¯ããæ®ãã®ãã¡ã€ã«ã«ã¯éšåã¯ã©ã¹å®çŸ©ã®ã¿ãå«ããããšã§ãã ãšã¯ã¹ããŒãããå Žæããã€ã³ããŒãããŸãã ããªãã®äŸããïŒ
_app / my-class.ts_
export partial class MyClass { firstName = "John"; lastName = "Smith"; }
app / my-class.part.ts
partial class MyClass { get fullName(): string { return this.firstName + ' ' + this.lastName; } }
ç§ã¯æ§æã®æŠå¿µã奜ãã§ãããåé¡ã¯ãäžçš®ã®æé»çãªã¢ãžã¥ãŒã«ãšããŠæ¶è²»ãããã¹ã¯ãªããã®ããã«èŠããç¹å®ã®æ¹æ³ã§ããŒãããå¿ èŠãããæ°ãã_çš®é¡ã®ãœãŒã¹ãã¡ã€ã«ãå°å ¥ããããšã§ãã
äžè¶³ããŠããã®ã¯ãã³ã³ãã€ã©ã«ããŒãã®å Žæãç¥ãããããã®æ§æã§ãã ããã¯ããã¹ãŠã®ãã¡ã€ã«ãäžåºŠã«åŠçããCïŒã®åé¡ã§ã¯ãããŸããã ããã¯ã宣èšã®ããŒãžã«äœ¿çšãããæ§æãšããŠãç¹å¥ãªæ§æã§ããå¯èœæ§ããããŸãã
宣èšã®ããŒãžã¯ããœãŒã¹ãã¡ã€ã«ã§ã¯ãªãã_declarations_ã«å¯ŸããŠæ©èœããŸãã
éšåã¯ã©ã¹ã§ä»»æã®å®çŸ©ãèš±å¯ããå¿ èŠã¯ãããŸããã ããšãã°ãã¡ãœãããããããã£ãã³ã³ã¹ãã©ã¯ã¿ãŒã«ã®ã¿å¶éã§ããŸãã ããã«ãããå®è¡é åºãéèŠã§ãªããªããã¡ã³ããŒãéè€ããŠããå Žåã«ã³ã³ãã€ã©ãŒããšã©ãŒãã¹ããŒã§ããããã«ãªããŸãã
ãããã¯ãã¹ãŠãäžè¬çã«é åºã«äŸåããŸãã
ç·šéïŒã€ãŸããããããå®çŸ©ãããšã¯ã©ã¹ãå€æŽãããŸãã
ãããã誰ãããã§ã«ããã«ã€ããŠèšåããŠããŸãããå¥ã®äŸ¿å©ãªã±ãŒã¹ã¯ãã³ãŒããžã§ãã¬ãŒã¿ãŒããã¯ã©ã¹ã®äžéšãçæããå®è£
ã«çŽæ¥æåã§ã³ãŒããè¿œå ãããå Žåã§ãã
ããã·ã³ã°ã掟çã¯ã©ã¹ã¯æ¬åœã«ããããããŸããã
ããã¯ãŸã 1ã€ã®ã¯ã©ã¹ã§ã-äžéšã ããèªåçã«çæãããä»ã®éšåã¯æåã§çæãããŸãã
ãšããã§ïŒèª°ããCïŒã¯ã©ã¹ããTSã¿ã€ããçæããå¿ èŠãããå Žåã¯ã TypeScriptBuilderã確èªã§ããŸã
ãããæ€èšããŠããã ãããããšãããããŸãïŒ
TypeScriptBuilderãè©ŠããŠã¿ãŸã;ïŒ
ç§ã®ãããã...
ã³ã³ãã€ã©ããã¹ãŠã®éšåãèŠã€ããããšããªãã£ãå Žåã¯ã©ããªããŸããïŒ ä»ã®éšåãã€ã³ããŒãããŠãã¹ãŠãå¶åŸ¡ããå¿ èŠãããå Žåã¯ã©ããªããŸããïŒ
/MyClass.partial.ts
export partial class MyClass {
firstName = "John";
lastName = "Smith";
}
MyClass.ts
// v- this would NOT throw an error because the definition is marked as partial
import { MyClass } from "./MyClass.partial";
export class MyClass {
get fullName(): string {
return this.firstName + ' ' + this.lastName;
}
}
ããã§...
MyClass
ã䜿çšãããå Žåã¯ã MyClass.ts
ããã€ã³ããŒãããå¿
èŠããããŸãMyClass.partial.ts
ã¯ãåã«ç€ºããããã«MyClass.prototype
ãæ¡åŒµããJavaScriptãçæããŸãã ãã ããæ¡åŒµãããããã¿ã€ããåãåãé¢æ°ããšã¯ã¹ããŒãããŸããMyClass.partial.ts
ã¯ã MyClass
ãå®çŸ©ããããã®æ¡åŒµé¢æ°ãåŒã³åºãããåŸã MyClass
ã«ã€ã³ããŒããããŸããã¡ãªã¿ã«...ã³ã³ãã€ã«ãããã³ãŒããçŽæ¥çæããããšã劚ãããã®ã¯äœããããŸããã ããããç§ã¯Typescriptã®çŽ æŽãããããã¹ãŠå€±ããŸãã
@svalloryããã¯ééããªãæ£ããã¢ãããŒãã ãšæããŸãã å ·äœçã«ã¯ãçæãããã³ãŒããæ¡åŒµãåŒãèµ·ããé¢æ°ããšã¯ã¹ããŒããããšèšãã®ã§ãé¢æ°ã¯å¿ èŠãªæ±ºå®è«çãªé åºã§åŒã³åºãããšãã§ãããããéåæã€ã³ããŒãã§ãæ©èœããŸãã
ããäžè¬çã«ã¯ããããåç §ãããåé¡ãå¿ããŠããŸããã¯ã©ã¹ãããã¿ã€ããžã®å²ãåœãŠãã¯ã©ã¹ã®åœ¢ç¶ã«åœ±é¿ãäžããå Žåãå€ãã®å©ç¹ããããŸãã ããã«ãããããã¯ã¹ã€ã³ã©ã€ãã©ãªãæ¹åããããã³ã¬ãŒã¿ãã¯ããã«äŸ¿å©ã«ãªããäžè¬ã«åçŽéå±€ãå°ãªããªããŸãã
ã³ã³ãã€ã©ãããããã¹ãŠã远跡ããã®ã¯é£ãããããããŸããããããªããææ¡ããããã«æ瀺çã«ããããšã§ããããåäœãããããšãã§ããŸãã
ããã¯åã·ã¹ãã ã®æ¡åŒµã§ãããéšåã¯ã©ã¹ã®ãŠãŒã¹ã±ãŒã¹ã¯ãã®æ¡åŒµããå€ããŸãã
ç§ã¯æ¬¡ã®ããã«ãããããŸããïŒ
ç§ã¯æ¬¡ã®ããã«ãããããŸããïŒ file1 ã NS ã€ã³ã¿ãŒãã§ã€ã¹ifoo { a ïŒ ïŒ ïŒ void ; } ã¯ã©ã¹fooã¯ifoo {ãå®è£ ããŸã a ïŒ ïŒ { / *äœãããã* / } } file2 ã NS /// <reference path = "file1.ts" /> //äžèŠ ã€ã³ã¿ãŒãã§ã€ã¹ifoo { b ïŒ ïŒ ïŒ void ; } foo ã ãããã¿ã€ãã b = ïŒ ïŒ = > { / *äœãããã* / } file3 ã NS /// <reference path = "file1.ts" /> //äžèŠ ã€ã³ã¿ãŒãã§ã€ã¹ifoo { c ïŒ ïŒ ïŒ void ; } ïŒ<ifoo> FOOããããã¿ã€ãïŒã c = ïŒ ïŒ = > { / *äœãããã* / } æ¶è²»è ã NS /// <reference path = "file1.ts" /> /// <reference path = "file2.ts" /> /// <reference path = "file3.ts" /> f = new foo ïŒ ïŒ ; f ã a ïŒ ïŒ ; f ã b ïŒ ïŒ ; f ã c ïŒ ïŒ ;
Module Augmentationã¯ãããã§ã®åé¡ã®90ïŒ ã解決ããŸãã @svalloryã®äŸã
/MyClass.partial.ts
export partial class MyClass {
firstName = "John";
lastName = "Smith";
}
MyClass.ts
// v- this would NOT throw an error because the definition is marked as partial
import { MyClass } from "./MyClass.partial";
export class MyClass {
get fullName(): string {
return this.firstName + ' ' + this.lastName;
}
}
ã¢ãžã¥ãŒã«ã®æ¡åŒµã¯æ¬¡ã®ããã«ãªããŸã...
MyClass.ts
export class MyClass {
firstName = 'John';
lastName = 'Smith';
}
MyClass.generated.ts
import { MyClass } from './test';
Object.defineProperty(MyClass.prototype, "fullName", {
get(this:MyClass) {
return this.firstName + ' ' + this.lastName;
}
});
declare module './test' {
interface MyClass {
readonly fullName: string;
}
}
éšåã¯ã©ã¹ãããå°ãåé·ã§ãããå®éã«ã¯ãéšåã¯ã©ã¹ã¯ãã®å®è£ ã®æ§æç³è¡£æ§æã«ãããŸããã
ä»æ¥ããªããæã£ãŠããªãå¯äžã®èœãšãç©Žã¯æ¬¡ã®ãšããã§ãïŒ
this: MyClass
æ§æã䜿çšããŠãã©ã€ããŒããã£ãŒã«ããŸãã¯ä¿è·ãã£ãŒã«ãã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸãããany
ãã£ã¹ãããããšã§ãçæãããã³ãŒãã§ç°¡åã«è§£æ±ºã§ããŸããthis
ä¿è·ãããã¡ã³ããŒã«ã¢ã¯ã»ã¹ã§ããããã«è¿œå ã§ãããã®ã§ãã ãã®åšãã«ä»ã®ã«ãŒã«ããããããããŸãããç·šéïŒããã¯TS2.0以éã®æ§æã§ããããšã«æ³šæããŠãã ããã
@ david-driscollåæããŸãã ããã¯ãã£ãšç°¡åã ãšæããŸãããè¿œå ã®æ§æãå°å ¥ãããŠããªãã®ã奜ãã§ãã ãåç¥ã®ããã«ãç§ã¯ç¹å®ã®èšèªæ©èœãšããŠéšåã¯ã©ã¹ã«å察ããŠããŸãããTypeScriptããããã¿ã€ããžã®å²ãåœãŠãäžè¬çã«è¿œè·¡ããããã«å¿ããŠãªããžã§ã¯ãã®åœ¢ç¶ãæ¹è¯ãããšæçã ãšæããŸãã ããªãã®ã¢ãããŒãã¯ãã¯ã©ã¹ãè€æ°ã®ãã¡ã€ã«ã«åå²ããæ£ããæ¹æ³ã ãšæããŸãã
@wongchichongãã®äŸã§ã¯ãã°ããŒãã«ã¯ã©ã¹åãš/// <reference path="..."/>
ãŸãã åå空éã䜿çšããŠç¶æ³ãæ¹åããããšã¯ã§ããŸããããããããŸãæ¡åŒµã§ãããšã¯æããŸããã
ã¢ãžã¥ãŒã«ïŒã€ãŸãå€éšã¢ãžã¥ãŒã«ïŒãšããŠèšè¿°ãããã³ãŒãã¯ãé åºã«äŸåãæé»çãªäŸåé¢ä¿ãèªèããå¿
èŠãããããŒããŒãå«ããããéåžžã«ç°ãªãç£ã§ãã @svalloryã®ææ¡ã䟡å€ãããã®ã¯ãã®ããã§ããããã¯ãäŸåé¢ä¿ãæ瀺çã«ããéåžžã«æå°éã®æåé
ç·ãå¿
èŠãšããŸãã
誰ããã¢ãžã¥ãŒã«ã䜿çšããªãå Žåã¯ã©ããªããŸããïŒ
@pankleksã®éšåã¯ã©ã¹ã¯ãŸã æªãèãã§ãã
æ確ã«ããããã«ãç§ã¯ããããã¯ã©ã¹å®£èšã宣èšçã§ã¯ãªãåœä»€çã§ããJavaScriptã®ãããªèšèªã§ã¯æªãèãã§ããããšãæå³ããŸãã åå空éã䜿çšããŠããå Žåã§ããã³ãŒããè€æ°ã®ãã¡ã€ã«ã«åå²ããããšã«ãªããŸããã€ãŸãããããæ©èœãããã«ã¯ããããã®ãã¡ã€ã«ã®ã¹ã¯ãªããã¿ã°ã®é åºã«äŸåããå¿ èŠããããŸãã
CïŒã®ãããªèšèªã§ã¯ãéšåã¯ã©ã¹ã¯ããŸãæ©èœããŸãããããã¯JavaScriptã®ã¯ã©ã¹ãšã¯æ ¹æ¬çã«ç°ãªãããã§ãã
JavaScriptã§ã¯ã宣èšã¯ãã¡ãããã¯ã©ã¹å®£èšãåŒãäžããããªãããšãèŠããŠããããšãéèŠã§ãã
ES6ãé€ããŠããã¯ã©ã¹ãã®æŠå¿µã¯TSã«ãã£ãŠå®çŸ©ãããŸãã JSã«ã¯ãã¯ã©ã¹ã®æŠå¿µã¯ãŸã£ãããããŸããã
ã§ã¯ãã¯ã©ã¹ãäœã§ãããã決å®ããã®ã¯TypeScript次第ã§ãããïŒ
ES6ãé€ããŠã
TSã®ç®æšã®1ã€ã¯ãçŸåš/å°æ¥ã®ESä»æ§ã«åŸãããšã§ãããããTSèšèªæ©èœã«ã€ããŠèª¬æãããšãã«ES6ãçŠæ¢ããããšã¯ã§ããŸããã
確ãã«ïŒ/
ã³ãŒãçæã¯ã©ã¹ïŒãšã³ãã£ãã£ããµãŒãã¹ã¬ã€ã€ãŒã¯ã©ã€ã¢ã³ããªã©ïŒãæã€å€§èŠæš¡ã·ã¹ãã ã®å ŽåãCïŒèšèšã«ããéšåã¯ã©ã¹ã¯ãçæãããã³ãŒããè¿œå ã®ç¶æ ãšåäœã§æ¡åŒµããå¿ èŠãããå Žåã«ãéåžžã«æŽç·Žããããœãªã¥ãŒã·ã§ã³ãæäŸããŸãã ç§ã®çŸåšã®ãããžã§ã¯ãã§ã¯ãçŽ500ã®ã³ãŒãçæã¯ã©ã¹ããããŸããããã®æ©èœããšãŠãæããã§ãã
ãããã¯æªãèãã ããšèšãããšãé€ããŠãä»ã®å Žæã§æçšã§ããããšã蚌æãããŠããæ©èœã«å¯ŸããŠäœäººãã®äººã ããªãããã»ã©æµå¯Ÿçã§ããã®ãç§ã¯ãŸã ç解ããŠããŸããã
ããã¯esdiscussã§ããŸãè°è«ãããŠããªãããã§ããç§ãèŠã€ããå¯äžã®ã¹ã¬ããã«ã¯9ã€ã®æçš¿ããããŸãã
@ yahiko00ç§ããã®æŠå¿µã«æµå¯ŸããŠããããã§ã¯ãããŸããã ããªããèšãããã«ãããã¯CïŒã®ãããªèšèªã§éåžžã«åœ¹ã«ç«ã¡ãŸãã
ç±å¿ãªCïŒããã°ã©ããŒãšããŠãéšåã¯ã©ã¹ã¯ç¹å®ã®ã¿ã¹ã¯ã«éåžžã«åœ¹ç«ã€ãšæããŸãã ãã ãããããã¯èšèªã®ä»ã®åŽé¢ã«å¹²æžããŸããã ãããã¯ãåå空éãã¢ã»ã³ããªãä»»æã«é åºä»ãå¯èœãªå宣èšãªã©ã®ããŒé¢é£ã®æœè±¡åãå£ããŸããã
äžæ¹ãJavaScriptã«ã¯ãããããåæã®ã¢ãžã¥ãŒã«ã·ã¹ãã ããããŸãã ã¯ã©ã¹ã¯æ°ãããèšèªã®è¡šçŸåã¯ãŸã ããŸãé«ããããŸããããæé·ããã«ã¯æéãå¿ èŠã ãšç§ã¯äž»åŒµããŸãã
å°ãåã«æ»ã£ãŠãCïŒã®ãã1ã€ã®åŒ·åã§ã¯ããã«äŸ¿å©ãªæ©èœã§ããæ¡åŒµã¡ãœãããæ€èšãããšãJavaScriptã«è¿œå ãããããšãæãã§ããŸãããããããããšã«ã¯æ ¹æ¬çãªåé¡ãããããŸã 解決ãããŠããŸããã
ã¢ãžã¥ãŒã«ãªã©ã®ã¯ããã«åºæ¬çãªæŠå¿µãå£ããããå³ããå¶çŽãããããããšãªãéšåã¯ã©ã¹ãæå®ã§ããããã«ãªã£ããšããç§ã¯ããããè¿œå ããããšã«è³æããŸãã
ããã¯èšã£ãŠãã @ SaschaNazãææããŠããããã«ãããã¯ECMAScriptã§å¯ŸåŠããå¿ èŠããããŸãã
èå³ã®ãã人ã¯èª°ã§ãhttp://esdiscuss.orgã§æ°ããã¹ã¬ãããéããŠãããã«URLãæçš¿ããŠãããã§è°è«ãç¶ããããšãã§ããŸãð
PSïŒãŸãã¯ãã以äž-GitHubã®ãããªESè«è©±ã
PS2ïŒãŸãã¯ãGitHubã®ãããªããã¢ã¯ãã£ããªWICGã§ãã
ç§ãTSã®ã³ãŒãçæãå¯èœã«ããããã€ãã®æ§é ãèŠãããšæã£ãŠããŸãã éšåã¯ã©ã¹ã¯ãCïŒã§ããã«æé©ã§ãã
äœãã足ããªããããããŸããããã³ã¢ã®åé¡ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒä»¥å€ã®å Žæãã§ããã°å¥ã®ãã¡ã€ã«ããããã©ã€ããŒããå€æ°ã«ã¢ã¯ã»ã¹ã§ããã¯ã©ã¹ãæ¡åŒµããããšã§ããããã«æãããŸãã
è°è«ã«åºã¥ããšããå®å šãªãTSã€ãããŒã·ã§ã³ã®å€ããè¡ãããããã§ãã ä»åŸã¯äœãå£ããããªãã®ã§ãESã¬ããã³ã¹æ©é¢ãäœãããã®ããåŸ ã£ãŠããŸãã å®å šã«æå¹ã§ãããTSã§ããéãåãåè»ãæãã§ããã®ã§ãå°ããã£ããããŸããã
åææ¡ä»¶ã¯ãé©åãªè±ç³ãèŠã€ããããšã§ãã
以åã¯ãã¯ã©ã¹ã«çŽæ¥è¿œå ã§ãããããéšåã¯ã©ã¹ã¯ããªãã°ãããŠãããšæã£ãŠããŸããããããããããšã§ãã¡ãœãããåæã§ããªãããã«ããã¹ãŒããŒãã€ã³ãã£ã³ã°ãä¿®æ£ããå¿ èŠãããããšãèãããšé åãããããŸãïŒåŸè ã¯çŸåšã ES6ïŒã
æåã«ãå€ãtoMethodã®ããã«ãã¯ã©ã¹äžè¬ãæ§æçã§åœä»€åã®ããªããã£ãã«é©åã«ä¿èšŒããããšãç解ããå¿ èŠããããŸãã ãããããããã§ãããã人éå·¥åŠç---ãŸãã¯ããã§ãªã---ãããã®ããªããã£ããæçµçã«ã©ã®ããã«ãªããã«å¿ããŠãéšåã¯ã©ã¹ã®ããã«ç ç³ãäžã«è¿œå ããã®ãåççãããããŸããã
ãããæ£ç¢ºã«äœãæå³ããã®ãããããŸãããããããã次ã®ããã«ãªããŸãã
class A {
foo() { return "foo" }
}
class B extends A {
}
partial(B, class {
get foo() {
return super.foo(); // should work
}
});
ïŒã¯ãã¹ã¯esdiscussã«æçš¿ãã
çŽç²ãªJSã§éšåã¯ã©ã¹ãå®è£ ããéåžžã«ç°¡åãªæ¹æ³ãããããã§ãïŒ ES2017 getOwnPropertyDescriptorsã䜿çšïŒã ESã®äººã ã¯ããã®å°ããªã³ãŒããåé€ããããã ãã«ã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã¯å¿ èŠãªããšèãããããããŸããã
function partial(base, extension) {
 extension.prototype.__proto__ = base.prototype.__proto__; // to enable 'super' reference
 const descriptors = Object.getOwnPropertyDescriptors(extension.prototype);
 delete descriptors.constructor; // must not override constructor
 Object.defineProperties(base.prototype, descriptors);
Â
  return base;
}
ãã¡ããããããTSã§äœ¿çšããã«ã¯ãæ¢åã®ã¯ã©ã¹ã¿ã€ããæ¡åŒµããããã«interface
è€è£œãå¿
èŠã§ãã
@SaschaNaz getOwnPropertyDescriptorsãä»ããŠã³ã³ã¹ãã©ã¯ã¿ãŒã«è¿œå ãããããããã£ã¯ãIDEã®ãèªåæ瀺ãã§ã¯é衚瀺ã«ãªããšæããŸãïŒå®è¡æã«è¿œå ãããããïŒã Typescriptã¯ãèªåæ瀺ããåããJavaScriptãšããŠçãŸããããšãå¿ããªãã§ãã ããïŒäººã ã¯ãããã匷çãªã¿ã€ãããšåŒã¶ããšããããŸãããå®éã«å¥œããªã®ã¯ãèªåæ瀺ãã§ãïŒã
PSãªã人ã ã¯éšåçãªã¯ã©ã¹ãå¿ èŠãšããã®ã-ã³ãŒãçæã ãã ããã³ãŒãçæã¯ãIDEïŒãœãŒã¹ãã¡ã€ã«ãžã®ç°¡åãªãããŒã«ã調æŽããã¡ã€ã«ãšã¯ã¹ãããŒã©ãŒã§ã®éå±€çµæãT4ãŸãã¯åæ§ã®ãå ±éã³ãŒããžã§ãã¬ãŒã¿ãŒããµããŒãïŒãšèšèªïŒéšåã¯ã©ã¹ãæ¡åŒµã¡ãœããïŒã®äž¡æ¹ã§ãµããŒãããå¿ èŠããããŸãã ãããç解ããŠåããŠãéçºè ãå®éã«äœãæ±ããŠããã®ããç解ããããšãå¯èœã«ãªããŸãã å šäœåãèŠããªãå Žåã¯ããã¡ãããéšåã¯ã©ã¹ãã¯ããã³ã»ã³ã¹ãã®ããã«èŠããŸãã
@aluanhaddad ïŒããããTypeScriptã®äž»ãªæ©èœã¯ãJavaScriptã«ååšããªãèšèªèŠçŽ ãæäŸããããšã§ã¯ãããŸãããïŒ ã¯ã©ã¹ã2ã€ã®éšåçãªTypeScriptãã¡ã€ã«ã«åå²ãããããã1ã€ã®JavaScriptãã¡ã€ã«ã«ã³ã³ãã€ã«ããã®ã¯ãªãæªãèãã§ããïŒ
ã³ãã¥ããã£ã«ããŒã«ãæäŸããããšã«åé¡ã¯ãããŸããã ãããŠãç§ã¯ãããæªçšããéçºè ããããš100ïŒ ç¢ºä¿¡ããŠããŸãã ããããããã䜿çšããæ¹æ³ãæ£ç¢ºã«ç¥ã£ãŠããéçºè ãããŸãã ããããã©ã®èšèªã®ã©ã®æ§ææŠå¿µã§ãåãç¶æ³ã«ãªããŸãããïŒ
ã³ãŒãçæã®ç®çã§+1ã ãããŠã @ rpokrovskijã«åæã
@greendimka ESã¢ãžã¥ãŒã«ããåå²ããESã¢ãžã¥ãŒã«ãå€§å¹ ã«è€éã«ããããšãªãããããã©ã®ããã«æ©èœãããã¯ããããŸããã
@ xiexin36 TypeScriptã¯ãç§ã«ã¯CïŒãããJavaScriptã®ããã«æããŸãã
JavaScriptãšCïŒã®éã«ã¯å
±éç¹ããããŸããã class
æŠå¿µã¯äžççã«ç°ãªããŸãã
@ xiexin36ã®ã³ãŒãçæã§ã¯ãã¢ãžã¥ãŒã«æ¡åŒµãåŒãç¶ã䜿çšã§ããŸãïŒãã®ã¹ã¬ããã§åè¿°ããããã«ïŒã æ§æçã«ã¯ãéšåã¯ã©ã¹ã»ã©ãç°¡åãã§ã¯ãããŸããããåãã¿ã¹ã¯ãå®è¡ã§ããŸãã
@aluanhaddadãããšãããã¯éåžžã«ç°¡åã«æ©èœããŸããéšåã¯ã©ã¹ã¯ã³ãŒãã®æ§é ãå€æŽããŸããã åãã¯ã©ã¹ã®å®çŸ©ãè€æ°ã®ãã¡ã€ã«ïŒãšã«ããåäžã®JSã«ã³ã³ãã€ã«ãããïŒã«æžã蟌ãããšãã§ããŸãã
@aluanhaddadå³å¯ã«èšãã°ïŒjavascriptã«ã¯ã¯ã©ã¹ã®æŠå¿µããããŸããïŒES6ã¯ã©ã¹ã¯åã«
@ greendimkaES6ã¯ã©ã¹ãšTypeScriptã¯ã©ã¹ã¯åããã®ã§ãã
TypeScriptã¯ãJavaScriptã®ã©ã³ã¿ã€ã ã«æ§é ãè¿œå ããããšãç®çãšããŠããŸããã
ES6ã¯ã©ã¹ã¯_éåžžã«_å æ²¢ããããŸããã ããã¯ãJavaScriptã匷åãªèšèªã§ã¯ãªããšããæå³ã§ã¯ãããŸããïŒããã§ãïŒã TypeScriptã¯éçåä»ããæäŸããŠãèšèšæã«ãšã©ãŒããã£ããããé«å質ã®ããŒã«ãæäŸããã³ã³ããŒãã³ãã€ã³ã¿ãŒãã§ã€ã¹ã®éåžžã«æ£ç¢ºã§å³å¯ãªä»æ§ãå¯èœã«ããäžè¬ã«çç£æ§ãåäžãããŸãã
ES6ã¯ã©ã¹ã¯_éåžžã«_å æ²¢ããããŸããããTypeScriptãç¬èªã®ã¯ã©ã¹ã®æŠå¿µãå°å ¥ããããšã¯ããã®èšèšç®æšã«çŽæ¥éåããããšã«ãªããŸãã
ã¯ã©ã¹ãé¿ããã ãã§ãåé¡ã¯è§£æ±ºããŸãã
ãŸããããã¯éåžžã«ç°¡åã«æ©èœããŸãïŒéšåã¯ã©ã¹ã¯ã³ãŒãã®æ§é ã決ããŠå€æŽããŸããã åãã¯ã©ã¹ã®å®çŸ©ãè€æ°ã®ãã¡ã€ã«ïŒãšã«ããåäžã®JSã«ã³ã³ãã€ã«ãããïŒã«æžã蟌ãããšãã§ããŸãã
ãããŠã人éã«ç¥ãããŠããã»ãšãã©ãã¹ãŠã®ããŒã«ãå£ããŸããïŒ ããããçµæ§ã§ãã
@ david-driscollããããšãããããŸããè©ŠããŠã¿ãŸãããAngular2.0ã䜿çšããŠããŸãã
@InputãŸãã¯@Output ãããã¯åäœããŸãããšã«ããç§ã¯ãããè©ŠããŠã¿ãŸãã
@aluanhaddad ãã¯ã©ã¹ïŒjavascriptã«ã¯ã¯ã©ã¹ããããŸããããç¹°ãè¿ãããšã«ã©ã®ããã«
ã¡ãªã¿ã«ãTypeScriptããŒã ã¯éšåé¢æ°ãæäŸããŠãããŸãïŒ ä»ã®ãšãããé¢æ°å ã®é¢æ°ããããã®ã§ãCïŒããŒã ã«ãåãããšãäŒããŠãã ããã :)
念ã®ããã«èšã£ãŠãããŸãããéšåé¢æ°ã«ã¯éåžžã«ç¹æ®ãªæå³ãããã説æããŠããããšã¯æ³ååã®ç¯å²ã«ãã£ãŠéšåé¢æ°ã§ã¯ãªãããšã«æ°ã¥ããŠããŸããïŒ
ã³ãŒãçæã¯äŸ¿å©ã§ãããç§ã䜿ã£ãŠããŸãã
@aluanhaddad ã ãè€æ°ã®ãã¡ã€ã«ã«1ã€ã®ã³ã³ãã€ã«ãŠãããããšããçšèªãç解ããŠããŸããïŒ ãã¡ãããJavascriptã¯ã³ã³ãã€ã«èšèªã§ã¯ãããŸããããaïŒå®è¡åã«é¢æ°ãå®å šã«è§£æããå¿ èŠããããããããã³ã³ãã€ã«ããšåä»ããããšãã§ããŸããbïŒTypescriptã¯ã³ã³ãã€ã«èšèªã§ãã
ããªãã®æ³ååãå©ããããã«ïŒ
function partial func(arguments) {
return function() {
return codegenerated(arguments);
};
}
function partial func(arguments) {
function codegenerated(arguments){
// ...
}
}
ãŸããéšåã¯ã©ã¹ã¯ããŸã䜿çšããŸãããããããå¹æçã«äœ¿çšããã«ã¯ãã³ãŒãçæãã©ã¡ãŒã¿ãŒããæåãéšåã«æ ŒçŽããå¿ èŠãããããã®æ§æãèªã¿åãã«ã¯ãé©åãªèšèªããŒãµãŒïŒãªãã¬ã¯ã·ã§ã³ã§ã¯ãªãïŒãå¿ èŠã§ãã ãããããã®æ¹æ³ã¯æ¬¡ã®ãšããã§ããéšåã¯ã©ã¹ã¯ãã³ãŒãçæãå¿«é©ã«ããããã®å€ãã®æ段ã®1ã€ã«ãããŸããã
@rpokrovskij
æµå¯Ÿçã§ãããšããŠå€ããå Žåã¯ãè©«ã³ç³ãäžããŸãã ç§ã¯æ»æã軜èãæå³ããŸããã§ããã
ããªãã®äŸã«ã¯ãããèªäœã§ããªãæ£åŒãªèª¬æãå¿ èŠãšããåŽé¢ããããŸãã ãã®ææ¡ã¯å ã ãã³ãŒãçæã·ããªãªãçŽæ¥æå¹ã«ããããšã«é¢ãããã®ã§ã¯ãããŸããã§ããã
@aluanhaddad...ã
ãã¯ã©ã¹ãé¿ããã ãã§åé¡ã¯è§£æ±ºããŸãã-çå£ã«ãããã¯åé¡ã®è§£æ±ºçã§ããïŒïŒ ããããJavaScriptã®äœ¿çšãé¿ããã°ããã®è°è«å
šäœã®åé¡ã解決ã§ããŸãã 解決çã§ããããŸãããïŒ æ®å¿µãªãããç§ãã¡ã®å®å®ã«ã¯ãã®ãã ããªãèšèªããããŸããäœå¹Žãåã«Webã«ã¢ã¯ã»ã¹ã§ããã®ã¯å¹žéã ã£ãããã§ãã ãšã«ãããããã¯ãªããããã¯ã§ãã
ã人éã«ç¥ãããŠããã»ãšãã©ãã¹ãŠã®ããŒã«ãå£ãã-ããã¯ã©ã®ããã«å¯èœã§ããïŒ ã©ã®ããã«ïŒïŒïŒïŒ TypeScriptã§éšåã¯ã©ã¹ã䜿çšããŠäœããå£ãããšãæ³åããããšããŠããŸãããã§ããŸããã ç§ã¯åã«ã§ããŸããã ããã§å®éã®äŸãæããŠãã ããã
ä»ãããªããç®±ã茞éããããã«è»ãäœã£ããšæ³åããŠãã ããã åé¡ãªãåäœããŸãã ããªãã¯è»ãç©ã¿èŸŒãåŽåè
ãéããŸãã äœæ¥å¡ã¯äžåºŠã«2ã€ã®ç®±ãåããè»ã«å
¥ããŸãã ããã§ããã¹ãŠãæ£åžžã«æ©èœããŸãã
ããæ¥ãåŽåè
ã¯å¥ã®äŒç€Ÿã«åããŠåºçºããããªãã¯æ°ããäŒç€ŸãéããŸãã æ°ãããã®ã¯ãåäžã®ããã¯ã¹ãåãããããããŒãããå¥ã®åäžã®ããã¯ã¹ãåãããããããŒãããŸãã è«ççã«ïŒãã¹ãŠã倧äžå€«ã§ãã ããããããªãã¯èµ°ãåã£ãŠæ²é³ŽãäžããŸãïŒåæ¢ãåæ¢ãã·ã¹ãã é害ãçºçããŸããïŒ :)
ãã¯ã©ã¹ãé¿ããã ãã§åé¡ã¯è§£æ±ºããŸãã-çå£ã«ãããã¯åé¡ã®è§£æ±ºçã§ããïŒïŒ ããããJavaScriptã®äœ¿çšãé¿ããã°ããã®è°è«å šäœã®åé¡ã解決ã§ããŸãã 解決çã§ããããŸãããïŒ æ®å¿µãªãããç§ãã¡ã®å®å®ã«ã¯ãã®ãã ããªãèšèªããããŸããäœå¹Žãåã«Webã«ã¢ã¯ã»ã¹ã§ããã®ã¯å¹žéã ã£ãããã§ãã ãšã«ãããããã¯ãªããããã¯ã§ãã
ES2015ã«ã¯ç¢ºãã«å€ãã®åé¡ããããŸãã ES5.1ã«ã¯ç¢ºãã«å€ãã®åé¡ããããŸããã ç§ã®æèŠã§ã¯ãã¯ã©ã¹ã®æ¬ åŠã¯ãããã®ããšã®1ã€ã§ã¯ãããŸããã§ããã ç§ã®ãã€ã³ãã¯ãã¢ãžã¥ãŒã«ãã¿ãŒã³ãæããã«ãããªã©ã®ææ³ã䜿çšããããšã§ãéšåçãªã¯ã©ã¹ãäžèŠã«ãªããšããããšã§ãã TypeScriptã¯ãæããã«ããã¢ãžã¥ãŒã«ãã¿ãŒã³ãåå空éã«ç ç³ãæäŸããŸãã
ã人éã«ç¥ãããŠããã»ãšãã©ãã¹ãŠã®ããŒã«ãå£ãã-ããã¯ã©ã®ããã«å¯èœã§ããïŒ ã©ã®ããã«ïŒïŒïŒïŒ TypeScriptã§éšåã¯ã©ã¹ã䜿çšããŠäœããå£ãããšãæ³åããããšããŠããŸãããã§ããŸããã ç§ã¯åã«ã§ããŸããã ããã§å®éã®äŸãæããŠãã ããã
ESã¢ãžã¥ãŒã«ã䜿çšããå Žåãããã¯åé¡ããããŸãã ã³ã³ãã€ã«ãããŠããªã察å¿ãããã®ãšå¯Ÿå¿ããã³ã³ãã€ã©ã®ç©ççãªã¢ãŒãã£ãã¡ã¯ãã«äŸåããããŒã«ã¯ãããã®å¯Ÿè±¡ãšãªããŸãã ããã¯èšã£ãŠããTypeScriptã¯ãå€§å¹ ãªå€æŽã§ãããemitã§ããã調æŽã§ããŸãããäœæããTypeScriptãšäžèŽããªãJavaScriptãåºåããããšã«ãªããŸãã
ãããã£ãŠãåºæ¬çã«ãèšèªã®é²åã¯ããŒã«ã«ãã£ãŠæå¶ãããŠããŸããããŒã«ã¯ãèšèªã®é²åãªãã«ã¯æ±ºããŠé²åããŸããã
ç³ãèš³ãããŸããããããã§ã¯é²åããªãçç±ã®æ€çŽ¢ã®ã¿ã衚瀺ããŸãã
éšåçãªã¯ã©ã¹ãããããå©ç¹ã¯äœã§ããïŒããã¯ãèšèªãå¥ã®æ¹æ³ã§ãã§ã«è¡ãããšã¯ã§ããŸãããïŒ ç¢ºãã«ãããã¯çŽ æŽãããæ§æç³è¡£ã§ãããæ¬åœã®å©çã¯äœã§ããïŒ CïŒã®ããã«ãã以å€ã«å ·äœçãªäŸã¯ãããŸããïŒ
äœè«ã§ãããç§ãCïŒéçºè ãšããŠå§ããèšé²ãšããŠãããããJavaScript / CïŒã«ç§»è¡ããŸããã TypeScript 0.8ãçºè¡šããããšãJavaScriptçšã®CïŒã§ããããã§ã¯ãªããå³å¯ãªJavaScriptãæ¡çšãã匷åãªã¿ã€ãã®CïŒã楜ããéçºè ã«ãšã£ãŠããè¯ããã®ã«ãªã£ãŠããããã«è²©å£²ãããŸããã
TypeScriptã¯CïŒã§ã¯ãªããããCïŒã«æ©èœããããšããçç±ã ãã§ãCïŒããæ©èœãå³å¯ã«ç¶æ¿ããã¹ãã§ã¯ãããŸããã CïŒãTypeScriptããæ©èœãç¶æ¿ããŠã¯ãªããªãã®ãšåãããã«ã TypeScriptã«ã¯éåžžã«åªããŠãããããCïŒã®å ±çšäœåãªã©ã®æ©èœãå¿ èŠã ã£ãåæ°ã¯æ°ããããŸããããèšèªã«ã¯ãŸã é©ããŠããŸããã
ãããŸã§ãã³ãŒãçæãšã³ãŒãç·šæãèªã¿ãŸããã
ã³ãŒãçæãã¢ãžã¥ãŒã«æ¡åŒµãèŠãŠãã ãããããã§ææããããã€ãã®æ¬ é¥ããã
ã³ãŒãç·šæããªãŒãžã§ã³ã䜿ããšæããŸãïŒç¬ïŒïŒ ã³ãŒããæŽçããæ¹æ³ã¯ä»ã«ããããããããŸããïŒäœããã®çç±ã§ïŒ1ã€ã®ç¥ã®ã¯ã©ã¹ãããå Žåã¯ããã€ã§ããããå€ãã®ç¥ã®ã¯ã©ã¹ã«åå²ã§ããŸãã è¡šé¢çã«ã¯ãç¥ã®ã¯ã©ã¹ã¯èª°ããèŠãŠäœ¿çšããã€ã³ããŒãã§ãããå
éšã§ã¯ãããããç¥ã®ã¯ã©ã¹ã®ããããã£ãšããŠå€ãã®ã¯ã©ã¹ã§æ§æãããŠããŸãã çµç¹åã«éšåã¯ã©ã¹ã䜿çšããŠããå Žåã¯ãã³ãŒããå°ããªãã¡ã¯ã¿ãªã³ã°ããŠãã³ãŒããSOLID
ããå¿
èŠããããšæããŸãã
ãããŸã§ã«ééããã»ãšãã©ã®ã³ãŒãçæã·ããªãªã«æ¡åŒµãé©åãããããšãã§ããŸããã
Omnisharp-Clientã®å Žåãããã§ã¯ã€ã³ã¿ãŒãã§ã€ã¹æ¡åŒµæ©èœã䜿çšããŸããOmniSharp.Api.V2
ã¯CïŒã§ã®ãªãã¬ã¯ã·ã§ã³ãä»ããŠçæãããŸãã ãã¡ã€ã«ã®äžéšã«ã¯ããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®ãã¹ãŠã®ã¡ãœãããã¹ã¿ãåããããŒã«ããããŸãã
RxJSã®å Žåã Observableã«ãããã¹ãŠã®ã¡ãœããã
éšåã¯ã©ã¹ã®åé¡ã®ããã€ãã«ã€ããŠã¯ãç§ã«ã¯çç±ããããŸããã ããšãã°ã3ã€ã®éšåã¯ã©ã¹ãäžãããããšããŸãã
MyAwesomeClass1.ts
MyAwesomeClass2.ts
MyAwesomeClass3.ts
namespace
/ module
ïŒã°ããŒãã«ã³ã³ãã€ã«ã¯ããããæãç°¡åã§ãããšæãããå Žæã§ãã TypeScriptã¯ãã§ã«åå空éãããŒãžããŠããããã
tsconfig.json
ã«Class1ãšClass2ã®ãã¡ã€ã«ãã¹ã®ã¿ãå«ãŸããŠããå ŽåãClass3ã«ãããã®ã¯èªåçã«ããŒãžãããŸããã
å€éšã³ã³ãã€ã«ã§ã¯ãåã¢ãžã¥ãŒã«ã«ã¯ãã¹ãŠã®äŸåé¢ä¿ïŒã€ã³ããŒãïŒãšãã¹ãŠã®ãããªãã¯APIïŒãšã¯ã¹ããŒãïŒã®æ瀺çãªãªã¹ãããããããåãã¡ã€ã«ã¯å®éã«ã¯ã¢ãžã¥ãŒã«ïŒãŸãã¯.NETã®äžçã§ã¯å°çã®ã¢ã»ã³ããªïŒãšèŠãªãããŸãã
ãããã®ã·ããªãªã«ã€ããŠã©ã®ããã«æšè«ããŸããïŒ
ãã¡ã€ã«åç
§ã1ã€ãããªãå Žåãã¯ã©ã¹ã®åäœã¯ã©ããªããŸããïŒ
Class2ãšClass3ãèªåçã«ããŒãžããŸããïŒ
// somefile.ts
import { MyAwesomeClass } from 'MyAwesomeClass1';
new mac = new MyAwesomeClass();
mac. // What methods are available here?
ã¯ã©ã¹ã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãæ瀺çã«ã€ã³ããŒãããå¿
èŠããããŸããïŒ ïŒãããããšãç®çã®imoãç¡å¹ã«ãªããŸãïŒã
ãã¹ãŠã1ã€ã®ãã¡ã€ã«ã«ã€ã³ããŒãããå¥ã®ãã¡ã€ã«ã«ã¯ã€ã³ããŒãããªããšãã¡ãœããã«äœãçºçããŸããïŒ
ããã¯ãäœåãªããŒã·ã£ã«ãªãã§ã¯ã©ã¹ã1å䜿çšãããè€éãªäŸåé¢ä¿ã°ã©ããèãããšãæ¬åœã«å¥åŠãªãšã©ãŒã«ã€ãªããå¯èœæ§ããããŸãã å€ã¯å¢å ããŸããïŒ ãŸãã¯ãã¡ãœãããåã蟌ãä»ã®ãã¡ã€ã«ãããŒãããããŸã§ãã¡ãœããã¯éæ³ã®ããã«æ©èœããŸãããïŒ
// somefile.ts
import { MyAwesomeClass } from 'MyAwesomeClass1';
import { MyAwesomeClass } from 'MyAwesomeClass2'; // or maybe import 'MyAwesomeClass2';
import { MyAwesomeClass } from 'MyAwesomeClass3'; // or maybe import 'MyAwesomeClass3';
new mac = new MyAwesomeClass();
mac. // What methods are available here?
@ david-driscollããã«ç§ã®2ã»ã³ãã ãïŒ
確ãã«ãããã¯çŽ æŽãããæ§æç³è¡£ã§ãããæ¬åœã®å©çã¯äœã§ããïŒ
åªããã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã¯ãã©ã®èšèªã®èŠç¹ã§ããããŸãããïŒ éçšã®èŠ³ç¹ãããå¿ èŠãªã®ã¯ã«ãŒããifå¥ãããã³ãã¹ãŠãå®è¡ããããã®å埩ã ãã§ãã æ®ãã¯ãçç£æ§ãé«ããä»ã®åæ§ã®éæ©èœçå質ãæäŸããããã«ã_çŽ æµãªã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒ_ã§ãã
ãããŠãèšèªã¯äžè¬çã«ã³ã³ãã¥ãŒã¿ã«æ瀺ããæäœã®éšåã«åªããŠããŸãããã³ãŒããæžãããšã®çµç¹çãªéšåãäžè¬çã«åžã蟌ã¿ãŸãã ãªããžã§ã¯ããã¯ã©ã¹ãç¶æ¿ãªã©ã®æåçãªã¢ãããã¯ã¢ãŒãã£ãã¡ã¯ãããããŸãããçµç¹åæäœã®ãã¡ã€ã³ãšããœãŒã¹ã³ãŒãã§é çªã«æ§ç¯ããã³è¡šçŸããããšããŠãããã¹ãŠã®æœè±¡åãå®éã«èª¬æããã確åºãšããçè«çåºç€ãafaikã¯ãããŸãããè¯ãæ¹æ³ã§ãããæ±ãããšãã§ããããã«ã
TypeScriptã«ã€ããŠç§ãæ°ã«å ¥ã£ãŠããç¹ã¯2ã€ãããŸãã1ãåä»ãã®JavaScriptã䜿çšã§ãããããã¯ã©ã€ã¢ã³ãã§è€éãªã·ã¹ãã ãçªç¶ç®¡çã§ããããã«ãªããŸãã 2.åã·ã¹ãã ã¯éåžžã«è¡šçŸåããããŸãïŒåã·ã¹ãã ã®å¶éãªãã«äººã ãæžãããšãã§ãããã¹ãŠã®çš®é¡ã®ãã¿ãŒã³ãJavaScriptã§è¡šçŸã§ããããã«ããããšã匷å¶ãããããïŒã
ããããã³ãŒãã®æ§é åã«é¢ããŠã¯ãä»ã®ã©ã®èšèªãããããã»ã©åä»ã§ã¯ãªããšæããŸãã ãããŠãç§ãã¡ã¯ããã§ãã£ãšé©æ°çã«ãªãããšãã§ãããããã®ã«ãšæããŸãã ãŠãŒã¶ãŒãèšèªã®çµç¹çãªéšåãèªç±ã«è©Šãããšãã§ããããã«ããŸãã å¶éçã§çãããã®ã§ã¯ãªããæ°ããæ§é çè¡šçŸåãéãããããç®æããŠåªåããŸãã
éšåã¯ã©ã¹ã¯ãç¹ã«ã³ãŒãçæã«éåžžã«äŸ¿å©ã§ããã ãã§ãªããäžè¬çãªç·šæã®èªç±åºŠãé«ããŸãã ãã®ã³ãŒãç·šæã®ã¿ãŒã«ãããããæãåºãããã«å¿ èŠãªèªç±ã
@ david-driscollããŒã·ã£ã«ãæã€ããšã®ãã€ã³ãã¯äœã§ããïŒ ããŠãããäžåºŠïŒã³ãŒãçæã
ææ¡ããããœãªã¥ãŒã·ã§ã³ã®äœãåé¡ã«ãªã£ãŠããŸããïŒ ããã¯åé¿çã§ãã ããã«å¥ã®åé¿çïŒãããŠããªãæ±ãåé¿çïŒã ç§ãã¡ã¯ãã§ã«ãåé¿çã§ãã£ã±ãã®ãã ããªãèšèªïŒjavascrtiptïŒãæã£ãŠããŸãã javascriptã®éçºè
ã¯ãäž»ãªã¿ã¹ã¯ã«ã€ããŠèãã代ããã«ãåé¿çã«ã€ããŠèããããšã«å€ãã®æéãè²»ãããŠããŸãã ããªãã®ææ¡ããå²åŠã§ãç§ãã¡ã¯TypeScriptèšèªå
šäœãæšãŠãããšãã§ããŸãã ïŒãµãã©ã€ãºããµãã©ã€ãºïŒåã·ã¹ãã å
šäœããåé¿çã䜿çšããŠçŽç²ãªJavaScriptã§ã·ãã¥ã¬ãŒãã§ããããã§ãã åé¿çã䜿çšããŠäœããã·ãã¥ã¬ãŒãã§ããã®ã«ããªãããè¡šçŸåã®ããèšèªïŒTypescriptãªã©ïŒãæ°ã«ããã®ã§ããïŒ åãããšã20è¡ã§æžãããŠããã®ã«ããªã1è¡ã®ã³ãŒããæžãã®ã§ããããã æžãããã³ãŒãã®æ°è¡ã«åºã¥ããŠçµŠäžãåãæ»ããŸãïŒ çããŠè¡šçŸåè±ããªã³ãŒãã¯ç«çšã§ãããïŒ
ãããïŒTypeScriptã«ããŒã·ã£ã«ãå«ããèŠæ±ã¯ãCïŒã«ããŒã·ã£ã«ããããšããèãã«åºã¥ããŠããŸããã TypeScriptã«ã¯ãä»ã®èšèªã«ããã®ã§ããããæã£ãŠãããšããçç±ã ãã§äœããããã¹ãã ãšã¯æããŸããã
ãããŠæåŸã«ïŒãªãããªãã¯äœãã䜿ããªããã°-誰ããããå¿ èŠãšããªããšæããŸããïŒ
@greendimkaç§ã¯æµæãã·ãŒã«ãïŒã ç§ã¯åã«ã·ããªãªãç解ããããšããŠããã ãã§ãããããã¯ãççŽã«èšã£ãŠå®å šã«å¯èœã§ããããšã«æ°ä»ããŠããªãã·ããªãªãããå Žåã¯ïŒ
ç§ã¯TypeScriptããŒã ã«æå±ããŠããããåãªãæ¯æè ã§ãããããŒã ã¯ããã§ã¯ããªãæ²é»ããŠããããšãèŠããŠãããŠãã ããã ããŒã ã¯ã圌ããäœãç¹å¥ãªããšãèšãããšããããšããéåžžã«ããŸããã£ã€ã ã鳎ãããããããŸããããããŠåœŒããããããããšãéžã¶ãªãã°ãç§ã¯åœŒãã«ä»»ããŸãã
TypeScriptããŒã ãä¿æããŠããäž»èŠãªããã³ãã®1ã€ã¯ãTypeScriptãECMAScriptã®æ¹åãšåæãããJavaScriptãé²åããŠããå šäœçãªæ¹åããéžè±ããå¯èœæ§ã®ããç¹å®ã®æ©èœãäœæããªãããã«ããããšã§ãã
ç§ãããã䜿ããªããšããããã§ã¯ãããŸããïŒãããããããååšããå ŽåïŒã åé¡ã¯ããã®åé¡ã®çŸç¶ã§ã¯ãéšåã¯ã©ã¹ã«ã¯èŠåãããå¯èœæ§ããããããããã«å®è£ ããããã©ããã¯çãããããã§ãã aïŒäŸ¡å€ã®é«ãå©å®³é¢ä¿è ã«ãšã£ãŠå¿ é ã®æ©èœã«ãªãããbïŒææ¡ãTC39ã®åŸã®æ®µéã«é²ããŸã§ããããããã°ããã¯ãã®ãŸãŸã§ãã
ModuleAugmentationãåé¿çãšã¯èããŠããŸããã ããã«ãããåã·ã¹ãã ãæ¡åŒµã§ãããã®ã¹ã¬ããã§è©³ãã説æãããŠããã³ãŒãçæã·ããªãªã®å€ããå¯èœã«ãªããŸãã ããã¯ãä»ã®èšèªæ©èœãžã®äžæ©ã§ãã
éãã§ããïŒ çµ¶å¯Ÿã«ããã¹ãŠã®å°çã®ããã«éãã ã€ãŸããã³ãŒããçæããŠããå Žåãéãã¯äœã§ããïŒ ã¯ã©ã¹ãæ¡åŒµããæ¹æ³ã«ã€ããŠå¿é ããå¿ èŠãããã®ã¯ãçæããŒã«ã ãã§ãã ã³ãŒãçæããŒã«ãå®è¡ããã¢ãžã¥ãŒã«ãå«ãããšãå®å šãªã€ã³ããªã»ã³ã¹ãã³ã³ãã€ã«ãšã©ãŒãªã©ãçºçããŸãã
å®ç§ã§ããïŒ ããããã¯çšé ãïŒ ããã¯ã¹ã€ã³ãèšèªã¬ãã«ã§ãµããŒãããå¿ èŠããããã¯ããã«äžè¬çãªã·ããªãªããããŸãã ãŸããå ·äœçãªææ¡ã¯ãããŸããããããã§ææ¡ãããŠãããšæããŸãã
@ david-driscollãéåžžã«å€±ç€Œã§ããããªããã ç§ã¯æ¬åœã«ååããªé²æ©ã®åŽã«ç«ã€åŸåããããŸãã
éçå®è£ ãéšåã¯ã©ã¹ã«é 眮ã§ããããã«ããããå¿ èŠã§ãã
ãããããã«å®çŸããããã«ã¯èŠããªãã®ã§ãç§ãã¡ãèŠã€ããåé¿çãææ¡ããããšæããŸãã ãã®ãããªã³ã¡ã³ããããã€ããããŸãããç§ã¯ãããã®è©³çŽ°ãèªãã§ãããã®ãèŠãŸããã§ããã
çæãããTypeScriptã³ãŒããæ¡åŒµã§ããããã«ããã³ãŒãçæã·ããªãªã§äœ¿çšããPartialsãå¿ èŠã§ãã ãã ããçžäºäŸåæ§ã®ããã¢ãã«ãçæããŠãããããã¯ã©ã¹ããã®ç¶æ¿ã¯åŸæ¥ã®æå³ã§ã¯ããŸãæ©èœããŸããã ä»ã®ã¯ã©ã¹ãåç §ããçæãããã¯ã©ã¹ã¯ãåç §ããããªããžã§ã¯ãã®æ£ããã¿ã€ãã§ã¯ãªããæ£ããã€ã³ã¹ã¿ã³ã¹ã¿ã€ããäœæããããã®è€éãªãã¡ã¯ããªãã¿ãŒã³ã«ãªããŸãã
çæãããã¯ã©ã¹ãåºæ¬ã¯ã©ã¹ã«å€æŽããããšã«ãªããŸããããã¯ã©ã¹å®£èšã®ã¿ã§ããã 次ã«ãæ°ããåºæ¬ã¯ã©ã¹ããç¶æ¿ããã¹ã¿ãã¯ã©ã¹ãäœæããŸããã 次ã«ããããã®æ°ããã¯ã©ã¹ãæ¡åŒµãããšãåºæ¬ã¯ã©ã¹ãããã¹ãŠã®ã³ã³ãã³ããç¶æ¿ããŸãã
äŸãã°ïŒ
ã¯ã©ã¹Personãçæããå ŽåãPersonBaseãçæããŸãã çæããããã¹ãŠã®ã³ãŒãã¯ãã®ã¯ã©ã¹ã«å
¥ããŸãã ãŸããPersonBaseãæ¡åŒµãã空ã®ã¯ã©ã¹PersonãçæããŸãã ãã®ã¯ã©ã¹ã¯äžåºŠã ãçæãããŸãã 次ã«ãçæããããã¹ãŠã®ã³ãŒããPersonBaseã«é
眮ãããã¹ãŠã®ã«ã¹ã¿ã ã³ãŒããæåã§Personã«é
眮ããŸãã çæãããPersonãžã®åç
§ã¯ãã¹ãŠãPersonBaseã§ã¯ãªãPersonãšããŠæ®ããŸãã ãã®ããã«ããŠããã¹ãŠã®IntelliSenseãåŒãç¶ãæ©èœããŸãã
ãã¡ã€ã«1ïŒåºæ¬ã¯ã©ã¹
module ViewModels {
export class PersonBase {
// Generated members
public anotherPerson: Person;
constructor(){
// Generated constructor code
}
}
}
ãã¡ã€ã«2ïŒå®éã®ã¯ã©ã¹
module ViewModels {
export class Person extends PersonBase {
// Custom methods
public NewVariable: string = "NewVar";
constructor() {
super();
// Custom constructor code
}
}
}
ããã«ãããçæãããã³ãŒãã«é¢ããéšåçãªã¯ã©ã¹ã®åé¡ã解決ãããŸããã ã¢ã€ãã¢ãæãã€ããã¢ã³ããªã¥ãŒã»ã¹ã³ããã«ç§°è³ãéããŸãã
ã³ãŒããžã§ãã¬ãŒã¿ãŒã䜿çšããŠã³ãŒããçæããŠããã®ã§ããããæ¬åœã«å¿ èŠã§ããããã«ããã€ãã®å€æŽãå ããå¿ èŠããããŸãã éšåã¯ã©ã¹ã䜿çšãããšãåŸã§å€æŽãå床远å ããªããŠãã³ãŒããåçæã§ããŸãïŒå€§ãããŠãè€éãªå ŽåããããŸãïŒã
ãŸã èšåãããŠããªããšæãéšåçãªã¯ã©ã¹ããããšããéèŠãªçç±ããããŸããããã¯ãJSãTSã«åŸã ã«ç§»è¡ããããšã§ãã Javascriptãç¹ã«ES6ããåã®ã¯ã©ã¹ã§ã¯ãã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
Foo.prototype.someFunction = function() {/*....*/}
ãŸãããããã¯ç¹å¥ãªåŠçãªãã§è€æ°ã®ãã¡ã€ã«ã«åæ£ã§ããŸãã ãã®ãããªã³ãŒãããŒã¹ãææ°ã®TypeScriptã«å€æããã«ã¯ãçŸåšãã¯ã©ã¹ã®ãã¹ãŠã®ã¡ã³ããŒãåããã¡ã€ã«ã«å«ãŸããããã«é¢æ°ã移åããå¿ èŠããããŸããããã¯ãããªã䟵襲çãªå€æŽã«ãªãå¯èœæ§ããããŸãã éšåã¯ã©ã¹ã§ã¯ãããŒã«ã«ç·šéã®ã¿ã䜿çšããŠç§»è¡ãå®è¡ã§ããŸãã
@RyanCavanaughããã§èŠæ±ããããã®ã¯ãã¹ãŠãä»ã®TypeScriptæ§æã§æ§æçã«åŠçã§ãããš
ããã¯ã¹ã€ã³ã®ææ¡ã«ã¯ãã£ãšå€ãã®æªè§£æ±ºã®è³ªåããããšæããŸãã ããã§ã®éšåçãªã¯ã©ã¹ææ¡ã¯ãTypeScriptã§ãã§ã«èš±å¯ãããŠãããã®ãäœç³»åãããã®ã§ãããæ§æç³è¡£æ§æãå«ãŸããŠããŸãïŒãã®æ©èœã¯ãæåéããæ¢åã®ãã®ãžã®æ§æã®åãããã³ã°ãšããŠå®è¡ã§ããŸãïŒã
ã§ã¯ãTypeScriptã§ãããè¡ãã«ã¯ã©ãããã°ããã§ããããïŒïŒ
File1.tsïŒ
// Imagine this file is code generated and could be regenerated during development
export partial class Contact
{
firstName: string;
lastName: string;
partial OnInit( args: any ) : void;
constuctor( args: any )
{
this.OnInit( args );
}
}
export class Address
{
addr: string;
city: string;
state: string;
zip: string;
}
File2.ts
// See where I'm going with this? This file would be hand edited and allows me to specify associations and children.
partial class Contact
{
Addresses: string[] = [];
partial OnInit( args: any ) void
{
this.firstName = args.firstName;
this.lastName = args.lastName;
this.Addresses.push( new Address() );
}
}
äžèšããã©ã³ã¹ãã€ã«ãããšãContactçšã«1ã€ã®JSã¯ã©ã¹ãåºåãããŸãã
var Contact = (function () {
function Contact() {
this.Addresses = [];
}
Contact.prototype.constuctor = function (args) {
this.OnInit( args );
};
Contact.prototype.OnInit = function (args) {
this.firstName = args.firstName;
this.lastName = args.lastName;
this.Addresses.push(new Address());
};
return Contact;
})();
var Address = (function () {
function Address() {
}
return Address;
})();
æåŸã«ãContactãšããååã®1ã€ã®ã¯ã©ã¹ãå¿ èŠã§ããã2ã€ã®å¥ã ã®ã¯ã©ã¹ã3çªç®ã®ã¯ã©ã¹ã«ãµãã¯ã©ã¹åããå¿ èŠããªãããšã«æ³šæããŠãã ããã
@cosmoKenney
ãããæ©èœãããã®ã®äŸã§ãã partial
ã»ã©æ§æçã«ã¯åé¡ãããŸããããæ©èœããéåžžã«æ©èœçãªãœãªã¥ãŒã·ã§ã³ã§ãã
// address.ts
export class Address
{
addr: string;
city: string;
state: string;
zip: string;
}
// contact.impl.ts
import { Address } from './address';
// Class implementation, do the things here that are not code generated
export class Contact {
firstName: string;
lastName: string;
addresses: Address[];
constructor(args: any) {
this.onInit(args);
}
}
// extending the interface here
// define methods you know will need in the constructor only
// This only applies to the constructor however
export interface Contact {
onInit(args: any): void;
}
// contact.partial.ts
import { Contact } from './contact.impl';
// Implement the extended contract here
Contact.prototype.onInit = function(this: Contact, args: any) {
this.addresses = args.addresses.concat();
// do stuff;
};
// Adding another method (not part of the extended interface)
Contact.prototype.somethingAwesome = function(this: Contact) {
// do awesome stuff here
};
// Tell TypeScript "I added this here!!!!"
declare module './contact.impl' {
interface Contact {
somethingAwesome();
}
}
// contact.ts
import { Contact } from './contact.impl';
import './contact.partial';
// Bring it all together (perhaps there are more than one partial class?)
export { Contact };
// main.ts
import { Contact } from './contact';
// use the contact!
const contact = new Contact(['my', 'args']);
const {firstName, lastName} = contact;
contact.somethingAwesome();
ãããã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãã³ãŒãçæãããããå®è£ ããã€ã³ã¿ãŒãã§ãŒã¹æ¡åŒµæ©èœã䜿çšããããšãã§ããŸãã
æ°ããMixinæ©èœã䜿çšããæ¹æ³ããããããããŸããããç§ã¯ãŸã ããã«ã€ããŠæ·±ãæãäžããŠããªãã®ã§ãé©åãªçããåºãããšãã§ããŸããã
@ david-driscollãããŒã é ãççºããã
ã³ãã¥ããã£ã¯ãåé¡ãå¹ãé£ã°ãããšãªãéšåçãªã¯ã©ã¹ããµããŒãããã ãã®ãã©ãŒã¯ã§çµããã®ã§ã¯ãªãããšæããŸãã
ãããŸã§ã®ãšãããéšåçãªã¯ã©ã¹ã«å¯Ÿããå®éã®è°è«ã¯èããããšããããŸããã æ æ°ãæ£åœåããçç±ã¯ã»ãã®ãããã§ãã
@greendimka
ã³ãã¥ããã£ã¯ãåé¡ãå¹ãé£ã°ãããšãªãéšåçãªã¯ã©ã¹ããµããŒãããã ãã®ãã©ãŒã¯ã§çµããã®ã§ã¯ãªãããšæããŸãã
ãããŸã§ã®ãšãããéšåçãªã¯ã©ã¹ã«å¯Ÿããå®éã®è°è«ã¯èããããšããããŸããã æ æ°ãæ£åœåããçç±ã¯ã»ãã®ãããã§ãã
ããã§äœãèšãããšããŠããã®ãããããªãã ããããã³ãã¥ããã£å
ã®å
šäœçãªæèŠããæ¢åã®èšèªæ©èœã䜿çšããŠåãçµæãéæã§ãããšããããšã§ããå Žåããããè¡ãæ¹æ³ã®ããã€ãã®äŸãå¿
èŠã§ãã @ david-driscollãäžã«æçš¿ãããã®ã¯ãç§ã®ç解ãã¯ããã«è¶
ããŠããŸãã ãããŠãåé¡ãå®å
šã«è§£æ±ºããŠããªãããã§ãã å®éãç§ãèšããããšããã圌ã¯ç§ã®æå³ã誀解ããŠããã
ç§ã®äž»ãªé¢å¿äºã¯ãpojoãã¢ãã«ã¯ã©ã¹ã®ãããªã¯ã©ã¹ã®ã¹ã«ã©ãŒããããã£ãã³ãŒãçæããããšã§ãã ãã ããå¥ã®ãã¡ã€ã«ãŸãã¯åããã¡ã€ã«ã§ããã©ã€ããªã¯ã©ã¹å®çŸ©å
ã«é¢é£ä»ãããããã£ãè¿œå ã§ããªãããã«ããå¿
èŠããããŸãïŒããã«ãããæ°ããã³ãŒãã§çæããããã©ã€ããªå®çŸ©ãå
ã®å®çŸ©ã«è²Œãä»ããããšãã§ããŸãïŒã
ããšãã°ãäžèšã®Contactã¯ã©ã¹ã¯ãfirstNameãšlastNameã§çæãããã³ãŒããååŸããŸãã ããããç§ã®å¥ã®å®çŸ©ã§ã¯ãAddressãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã®å®çŸ©ãšåæåãè¿œå ããŸãã
ç§ã®ã³ãŒããžã§ãã¬ãŒã¿ãŒã¯ãé¢é£ä»ãã§ã¯ãªãã¯ã©ã¹ã®å±æ§ã®ã¿ãèªèããŠãããããdavidã®äŸã§è¡ãããããã«ãã¢ãã¬ã¹ã³ã¬ã¯ã·ã§ã³ãã³ãŒãçæããããšã¯ã§ããŸããã
@cosmoKenneyã¢ãã¬ã¹ãã©ãã«ããã¹ããã¯å®å šã«ã¯æ確ã§ã¯ãããŸããã§ããã æèãééããããšãèš±ããŠãã ããã ç§ã¯ãã éžæè¢ãäžããã®ãæäŒãããšããŠããŸãã éšåã¯ã©ã¹ã®ããã«ã³ã³ãã€ã©ã«äœããå ¥ããã«åæ§ã®åäœãå¯èœã«ããæ©èœã¯ãããããããŸãããããã«ã¯ãäž¡æ¹ã®ã¢ãžã¥ãŒã«ã·ã¹ãã ïŒå éš/å€éšïŒãå®è£ ããããã®å€ãã®è¿œå ã®èæ ®äºé ãšæœåšçãªåé¡ããããŸãã
ããªãã®å Žåãæœè±¡åºæ¬ã¯ã©ã¹ãçæããããã€ã³ã¿ãŒãã§ãŒã¹çæãæ©èœããå Žåãä»ã®ã¯ã©ã¹ã¯ãããç¶æ¿ããŸãã ãã®åŸãã¯ã©ã¹ãçæããããšããäºå®ã¯ãŸã é ãããŠããŸãã
NSïŒ
// address.partial.ts
export interface IAddress
{
addr: string;
city: string;
state: string;
zip: string;
}
// address.ts
import { IAddress } from './address.partial';
export class Address
{
constructor(args: any) {
}
}
export interface Address extends IAddress{}
// contact.partial.ts
import { IAddress } from './address.partial';
export interface IContact {
firstName: string;
lastName: string;
addresses: IAddress[];
}
// contact.ts
import { Address } from './address';
import { IContact } from './contact.partial';
// Class implementation, do the things here that are not code generated
export class Contact {
addresses: Address[] = [];
constructor(args: any) {
this.firstName = args.firstName;
this.lastName = args.lastName;
this.addresses.push( new Address("address?") );
}
public somethingAwesome() {
//
}
}
export interface Contact extends IContact {}
// main.ts
import { Contact } from './contact';
const contact = new Contact(['my', 'args']);
const {firstName, lastName} = contact;
contact.somethingAwesome();
@cosmoKenney ïŒ@ david-driscollã¯èå³æ·±ããœãªã¥ãŒã·ã§ã³ãæäŸããŸãããããã§ãå®éã®éšåã¯ã©ã¹ã®äœ¿ããããã«æ¬ ããŠããŸãã ç§ã®å人çãªå®éšã瀺ããŠããããã«ãéçºè ã¯ãã®æ¹æ³ã§äœæããããéšåãã䜿çšããŸããã ããã¯åªããåé¿çã§ãããããŒã·ã£ã«ã®äœ¿ãããããšå¿«é©ãã¯ãããŸããã
çŸæç¹ã§ã¯ãTypeScriptã³ã³ãã€ã©ãå éšã§ã©ã®ããã«æ©èœãããããããŸããã ç§ã¯ããããã¹ãŠã®ãœãŒã¹ãã¡ã€ã«ãèªã¿åããããããé²ããJSãã¡ã€ã«ãåºåãããšä»®å®ããããšããã§ããŸããã ãããããªã-ç§ã¯ããã€ãã®ãœãŒã¹ãã¡ã€ã«ããåäžã®ã¯ã©ã¹ãèªã¿åãããšã«åé¡ã¯èŠãããŸããã 1ã€ã®ã¯ã©ã¹ã®2ã€ä»¥äžã®ãœãŒã¹ãã¡ã€ã«ã競åããã³ãŒããæäŸããå ŽåïŒåãããããã£ã2åå®çŸ©ãããŠããå ŽåïŒãã³ã³ãã€ã©ã¯åã«äŸå€ãã¹ããŒããŸãã æ§æçã«ç¡å¹ãªã³ãŒããèšè¿°ããå Žåãšåãããã«ã
@ greendimka ã@ david-driscoll
ç§ã¯Davidã®äŸãäžããã³ã³ãã€ã«ããããšããŸããããtsã¯ããã奜ãã§ã¯ãããŸããïŒ
C:\TestProjects\TypeScriptFakePartialClassTest>tsc -m amd address.partial.ts address.ts contact.partial.ts contact.ts main.ts
address.ts(4,14): error TS2300: Duplicate identifier 'Address'.
address.ts(10,18): error TS2300: Duplicate identifier 'Address'.
contact.ts(7,14): error TS2300: Duplicate identifier 'Contact'.
contact.ts(11,14): error TS2339: Property 'firstName' does not exist on type 'Contact'.
contact.ts(12,14): error TS2339: Property 'lastName' does not exist on type 'Contact'.
contact.ts(20,18): error TS2300: Duplicate identifier 'Contact'.
main.ts(5,8): error TS2459: Type 'Contact' has no property 'firstName' and no string index signature.
main.ts(5,19): error TS2459: Type 'Contact' has no property 'lastName' and no string index signature.
ããã«ã @ greendimkaã¯ããããè€éãããŠå€§èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§äœçŸåã䜿çšã§ããªãããšã«åæããŸãã
@greendimkaã³ã³ãã€ã©ãã©ã®ããã«æ©èœãããã¯ããããŸããããã¿ã¹ã¯ãéå°è©äŸ¡ããªãã§ãã ããã JavaScriptã¯.NETã§ã¯ãªããã¢ãžã¥ãŒã«ã¯ã°ããŒãã«ã«å©çšã§ããŸããïŒæåéãã€ã³ããŒãããå¿ èŠããããŸãïŒ
ãããå®è£ ãããã®ãèŠããã®ã§ããããã®ã¿ã¹ã¯ã§ã¯ã次ã®ããã«æ éã«æ€èšããå¿ èŠã®ããããã€ãã®ããšãçºçããŸãã
çã ...
@greendimka以äžã®ç§ã®åçãåç §ããŠãã ãã:(ç·šéïŒããã¯@WoLfulusã察象ãšããŠã
ã¯ã©ã¹ã®äžéšããã¡ã€ã«Aã«å®çŸ©ããäžéšããã¡ã€ã«Bã«å®çŸ©ããå Žåãå€æåŸã«ã¯ã©ã¹å šäœãå«ããå¿ èŠãããã®ã¯ã©ãã§ããïŒ æ°ãããã®ãçæããå¿ èŠããããŸããïŒ
ãã¡ã€ã«A.jsã«å®å šãªå®çŸ©ãããããã¡ã€ã«Bãã¹ã¿ããªããããŠããã°å®å šã«å¬ããã§ãã ãã¶ãã猶詰ã®ã³ã¡ã³ãã§ã ãšã«ããç§ãã¡ã®ã»ãšãã©ã¯ãã³ãã«ããŠããã®ã§ããã³ãã«ãããç¡æ°ã®.jsãã¡ã€ã«ã¯ãæçµçã«ã¯æ¬è³ªçã«åŸããèãããã®ã«ãªããŸãã
éšåçãªãã®ãå«ããã¹ãŠã®ãã¡ã€ã«ãåãã¯ã©ã¹ããšã¯ã¹ããŒãããå¿ èŠããããŸããïŒ
ããã¯ãæåã®è³ªåã«å¯Ÿããç§ã®åçã«ãã£ãŠã»ãŒçããããŸãã
ãããã®è¿œå ã®ã¡ã€ã³ãã¡ã€ã«ãå¿ èŠãªå Žåã埪ç°äŸåãåé¿ããã«ã¯ã©ãããã°ããã§ããïŒ
ããããªãã ãã®ã·ããªãªãèªèããã®ã¯ã¢ãžã¥ãŒã«ããŒããŒã®ä»äºã§ã¯ãããŸãããïŒ
ã¯ã©ã¹èªäœãããå€ãã®ãã®ãã¢ãžã¥ãŒã«ã«ãšã¯ã¹ããŒããããšã©ããªããŸããïŒ
ããã«ã¯åé¡ã¯ãããŸããã èšãæãããšãB.tsã«éšåçãªå®çŸ©ãšä»ã®ããã€ãã®ééšåçãªã¯ã©ã¹ã®äž¡æ¹ãããå ŽåãB.jsã«ã¯ãäžèšã®å®åã³ã¡ã³ããšééšåçãªã¯ã©ã¹ã®å®çŸ©ãå«ããå¿ èŠããããŸãã ã·ã³ãã«ã ãšæããŸãã
ååã®ç«¶åãã§ãã¯ïŒ
ã©ã®ããã«ããŠååã®ç«¶åãçºçããŸããïŒ ã¯ã©ã¹ãæå³ããå ŽåããpartialãããŒã¯ãŒãã¯ããã解決ããŸãã ããããä»ã®2ã€ã®ãã¡ã€ã«ãäž¡æ¹ãšãåãååã§ã¯ã©ã¹ãå®çŸ©ããŠãããããpartialãããŒã¯ãŒãããªãå Žåãã³ã³ãã€ã©ãŒã¯éè€ã¿ã€ãã«ã€ããŠãšã©ãŒãåºåããã¯ãã§ã-çŸåšã®ããã«ã ããããåãååã®ããããã£ãŸãã¯ã¡ãœãããå®çŸ©ããåãã¯ã©ã¹ã®2ã€ã®éšåçãªå®çŸ©ã«ã€ããŠè©±ããŠããå Žåãã³ã³ãã€ã©ã¯ãçŸåšã®ããã«ãéè€ããã¡ã³ããŒã«ã€ããŠãšã©ãŒãåºåããå¿ èŠããããŸãã
@ WoLfulus ã @ cosmoKenneyã¯ããçããŸããã æåã®è³ªåïŒAãã¡ã€ã«ãšBãã¡ã€ã«ã«ã€ããŠïŒã§ãããæ¹åããããã«ïŒèšèªèšèšè ãšããŠãã«ãŒã«ãå®çŸ©ããç¹æš©ããããŸãã ã€ãŸãããã¡ã€ã«Aã«ã¯ãã®ãããªã³ãŒããpartialclass Xããããããã¡ã€ã«Bã«ã¯ãã®ãããªã³ãŒããpartialïŒfileXïŒclass XãããããfileX.jsãçæãããŸãã
@cosmoKenney
ãããã®è¿œå ã®ã¡ã€ã³ãã¡ã€ã«ãå¿ èŠãªå Žåã埪ç°äŸåãåé¿ããã«ã¯ã©ãããã°ããã§ããïŒ
ããããªãã ãã®ã·ããªãªãèªèããã®ã¯ã¢ãžã¥ãŒã«ããŒããŒã®ä»äºã§ã¯ãããŸãããïŒ
TypeScriptã«ã¯ã¢ãžã¥ãŒã«ããŒããŒããããŸããã
@greendimka
ã³ãã¥ããã£ã¯ãåé¡ãå¹ãé£ã°ãããšãªãéšåçãªã¯ã©ã¹ããµããŒãããã ãã®ãã©ãŒã¯ã§çµããã®ã§ã¯ãªãããšæããŸãã
ãããŸã§ã®ãšãããéšåçãªã¯ã©ã¹ã«å¯Ÿããå®éã®è°è«ã¯èããããšããããŸããã æ æ°ãæ£åœåããçç±ã¯ã»ãã®ãããã§ãã
ããã¯è¯ãèãã§ã¯ãããŸããã ããšãã°ãåçã€ã³ããŒããè¿œå ããããšãã«ãã©ãŒã¯ãã©ã®ããã«ç¶æããããæ€èšããŸãããïŒ
ãŸããéšåçãªã¯ã©ã¹ã«å¯ŸããŠå€ãã®è°è«ããªãããŠããŸããã TypeScriptãã¡ã€ã«ãšJavaScriptãã¡ã€ã«ã®éã®ãœãŒã¹éã®å¯Ÿå¿ãç Žãããšã¯ãèšèªã®éèŠãªä¿¡æ¡ã«åããŸãã æ©èœãèæ
®ãããããã«ã¯ãéšåã¯ã©ã¹ãããç¡éã«äŸ¡å€ã®ããã·ããªãªãå¯èœã«ããå¿
èŠããããšæããŸãã ããã§ãæåŠãããå¯èœæ§ããããŸãã
@ WoLfulus ã @ cosmoKenneyã¯ããçããŸããã æåã®è³ªåïŒAãã¡ã€ã«ãšBãã¡ã€ã«ã«ã€ããŠïŒã§ãããæ¹åããããã«ïŒèšèªèšèšè ãšããŠãã«ãŒã«ãå®çŸ©ããç¹æš©ããããŸãã ã€ãŸãããã¡ã€ã«Aã«ã¯ãã®ãããªã³ãŒããpartialclass Xããããããã¡ã€ã«Bã«ã¯ãã®ãããªã³ãŒããpartialïŒfileXïŒclass XãããããfileX.jsãçæãããŸãã
ç§ã¯ããªããããªãã®ã¡ãã»ãŒãžãäŒããŠãããšã¯æããªãã ããã¯ãããªããã©ããªèšèªã§ã§ãèªåèªèº«ãè¡šçŸããããšã«ééããã©ããªå¶éãå®å
šã«æ£æçãªçç±ã§ååšããããã«æããããã«èãããŸãã
ãŸãã @ WoLfulusã®è³ªåã«ã¯ãå°ãªããšãç§ã®æºè¶³ã«ã¯çããããŸããã§ããã
ãã¬ãŒã ã¹ãŒããççš
TL; DRïŒããã¯èµ·ãã£ãŠããŸããã ã³ã¡ã³ãçªå·189ã§ããã«ããŠãäžæ¿èªãç»é²ãããå Žåã¯ãæåã«ã¹ã¬ããå šäœãèªãã§ãã ããããããè¿œå ããªãçç±ã¯äžèšã§è©³ãã説æãããŠããŸãã
ãã®ç¶æ³ã®è§£éã¯æ¬¡ã®ãšããã§ãã
implements
ãªã©ïŒããã§ã«å€ãããŠãå®éã«ã¯ãES6 +åãã§ããããšãæå³ãããŠããŸããã ã ãã®äžéšã¯ç§ãã¡ã®ããã§ããïŒç§ãã¡ã®å
ã®èšèšã®æ¹åæ§ã¯äžè¬çã«OOPã§ããïŒããã®äžéšã¯ES6ã®ããã§ãïŒã¯ã©ã¹ã®ææ¡ã¯5幎åã«ããªãåãåã.Designer.cs
ã¹ã¿ã€ã«ã®ã»ããã¢ããã®å€§å€±æã«ãªããŸãã ãObject.assign
ãªã©ãä»ã«ãå€ãã®æ§æã¡ã«ããºã ããããŸããCïŒã§ãã®æ©èœãå®çŸããã·ããªãªã¯ãJSã«ã¯ååšããªãå¶çŽã«ãã£ãŠåŒãèµ·ããããŸãããinterface
+ prototype.method = ...
ã¡ããã©ã ãã§ãªããçæãããã³ãŒãã®ã·ããªãªãæå¹ã«ãããpartial class
ã§ãããã ãã®ã³ãŒããæã§æžãã®ã¯å¥åŠã§ãããã³ãŒããå¥ã®æ¹æ³ã§çæããã®ã«åé¡ã¯ãããŸããããããã£ãŠãåå²ãã¡ã€ã«ã§çæãããã³ãŒãã»ããã¢ãããåé¡ã解決ããå¯äžã®æ¹æ³ã§ãããšæ¬åœã«æãå ŽåïŒç§ã¯æççã§ãïŒããã®æ¹æ³ãå©çšã§ããŸããããã«ã€ããŠ
ã€ã³ã¿ãŒãã§ã€ã¹+ prototype.method = ...ã®çŸåšã®åé¿çã¯ãéšåã¯ã©ã¹ãšåãããã«ãçæãããã³ãŒãã®ã·ããªãªãæå¹ã«ããŸãã
äœåºŠãèšåããããã«ãå¿ èŠãªããšãéæããããã®ééšåçãéCïŒã®æ¹æ³ãããã®ã§åé¡ãããŸããããããŠãå®éã®äŸãæ±ããŠãã ããã david-driscollã¯éåžžã«åœ¹ã«ç«ã¡ãŸããããã³ã³ãã€ã«ãããªãã³ãŒããæçš¿ããŸããã ãããã£ãŠãããšãã°ãäžèšã®ããã«ãå§ãåã®ã¿ã®ã¹ã«ã©ãŒããããã£ã䜿çšããŠã¯ã©ã¹ãã³ãŒãçæã§ãããšæãããå Žåã¯ãããã§åé¡ãããŸããã ä»ã®ã¿ã€ãã®ã³ã¬ã¯ã·ã§ã³ãã¯ã©ã¹ã®ããããã£ãšããŠæåã§ã³ãŒãã£ã³ã°ããæ¹æ³ãå¿ èŠã§ãã ãããããã®ã»ããã®åæåãåŠçããæ¹æ³ãå¿ èŠã§ãã
@cosmoKenneyããªãã¯æ£ããã³ãŒããã³ããŒãããµã€ãã§ããïŒ 2çªç®ã®äŸã§ã¯ãåãã¯ã©ã¹åã®ä»£ããã«ã€ã³ã¿ãŒãã§ã€ã¹ããããŸããã å¿ èŠã«å¿ããŠãã³ãŒãã®zipãæ·»ä»ã§ããŸãã ã€ã³ã¿ãŒãããäžã®ã©ã³ãã ãªãã¡ã€ã«ãæªãå¯èœæ§ããããç§ãæªæã®ãããã®ãæçš¿ããŠãããšããªãã«æãããããªãã£ãã®ã§ãç§ã¯ãã èºèºããŸããð
ãããèããŠç³ãèš³ãããŸããããç§ã¯ããã§è¡ãããèšèšäžã®æ±ºå®ãå°éããŸãã ããã§ãããããã°ãããã€ã質åããããŸãã
TypeScriptã«ã¯ãå®éã«ã¯ãES6 +ã¿ã€ãããæå³ãããã®ã«å¯ŸããŠãTSåºæã®ã¯ã©ã¹æ©èœïŒã³ã³ã¹ãã©ã¯ã¿ãŒããããã£å®£èšãã¡ã³ããŒåæååãéãã¡ã€ãã©ã€ãºããããã³ã¬ãŒã¿ãŒãã¢ã¯ã»ã¹ä¿®é£Ÿåãå®è£ ãªã©ïŒããã§ã«å€ãããŸãã ãã®äžéšã¯ç§ãã¡ã®ããã§ããïŒç§ãã¡ã®å ã®èšèšã®æ¹åæ§ã¯äžè¬çã«OOPã§ããïŒããã®äžéšã¯ES6ã®ããã§ãïŒã¯ã©ã¹ã®ææ¡ã¯5幎åã«ããªãåãåããæ©èœãããŸããããªãã£ãïŒã ããã«å¥ã®TSåºæã®ã¯ã©ã¹æ©èœãè¿œå ããããšã¯ãã©ã¯ãã®èäžã«ãããã1ã€ã®ã¹ãããŒã§ãããå¯èœã§ããã°é¿ããå¿ èŠããããŸãã
ãããèæ ®ãããšãJSã®çŽç²ãªã¿ã€ãã³ã°ãšãTSãæäŸããä»ã®èšèªæ§é ãšããçµç¹çããã³ã³ãŒãçã«æ確ã«åºå¥ããããšãå¯èœã§ããããã ç§ã¯ãã¿ã€ãã³ã°ãšè¿œå ã®èšèªæ©èœã®äž¡æ¹ã倧奜ãã§ãã æ¶è²»è /éçºè ãšããŠãç§ã¯TSãJSã«ãªããã®ãè¿œå ãããšããäºå®ã«ã€ããŠã¯ããŸãæ°ã«ããŸããã çŽ æŽããããã®ããã ãããTC39ããããæãŸãªãã®ãªããç§ã¯æ°ã«ããŸããã
TSããããã®ãã®ãçžäºã«ã«ãã»ã«åããå Žåã眮ãæããããã®ã§ã¯ãªããåå©çšã容æã«ãªããSoundScriptãªã©ã®ãããžã§ã¯ãã«ãã£ãŠãã©ãŒã¯ããã³æ§ç¯ãããå¯èœæ§ããããŸããïŒ
ãããŠãä»ã®ãããžã§ã¯ãããã®ã¿ã€ãã³ã°ã«åºã¥ããŠæ§ç¯ãããJSãæäŸãããããåªãã/ä»ã®èšèªæ§é ãæäŸããããšãã§ããŸãã
æããã«ãJavaScriptã®æªæ¥ã¯ã¢ãžã¥ãŒã«ã§ãã éšåã¯ã©ã¹ã¯ããã°ããŒãã«ã¹ãŒããã¢ãã«ã§ã®ã¿æå³ããããé©åã«æ©èœããŸãã è€æ°ã®ã¢ãžã¥ãŒã«ã«ãŸãããéšåçãªã¯ã©ã¹ãèš±å¯ããããšã¯ãããŒãã®é åºãäºæž¬ã§ããªããããçœå®³ã®ã¬ã·ãã§ãã ã°ããŒãã«ã®ã¿ã®ãŠãããŒã¹ã§ã®ã¿ããŸãæ©èœããæ©èœãè¿œå ããããšã¯ãæéã®æå¹æŽ»çšã§ã¯ãããŸããã
æ¬åœãïŒ ã¢ãžã¥ãŒã«ãJavaScriptã®èªç¶ãªéšåã«ãªãããšã¯ç¢ºãã§ãããå ã®ã³ãŒãæ¬äœã¯ã©ãã§ããããã ç§ã¯namspacesã倧奜ãã§ãé©åã«è¡ãããã°ã¹ãŒãã¯ãããŸããã ãã¹ãŠã1ã€ã®ãã¡ã€ã«ã«ã³ã³ãã€ã«ããŠããã®ã§ãã¢ãžã¥ãŒã«ããŒããŒã¯å¿ èŠãªããã»ãšãã©ã®å Žåãéåæã¢ãžã¥ãŒã«ããŒããå¿ èŠãããŸããã https://github.com/Microsoft/TypeScript/issues/420ã®ããã«ææ¡ããããã®ã¯ãåå空éã§ã®ã¿å¯èœã§ãããé¢é£æ§ããããŸãã ã¢ãžã¥ãŒã«ã ãã䜿ãã¹ããªã®ã§ããã®ãããªããšã¯èµ·ãããªããšèšã£ãŠããã®ã§ããïŒ åå空éã¯éæšå¥šãžã®éãé²ãã§ããŸããïŒ
@ david-driscollããããšãããããŸããããªãã¯ãã§ã«ååã«å©ããŠãããŸããã @RyanCavanaughã¯åé¡ãéãç¶ãã
ãŸããéšåã¯ã©ã¹ãšã¯äœãã«ã€ããŠå€ãã®èª€è§£ãèŠãããŸãã ããã¯æ¬åœã«åçŽãªæ§æã§ããã誰ãããããäžé£ãåãã«å¹ãé£ã°ããŠããŸãã
https://msdn.microsoft.com/en-us/library/wa80x488.aspx
ãããèæ ®ãããšãJSã®çŽç²ãªã¿ã€ãã³ã°ãšãTSãæäŸããä»ã®èšèªæ§é ãšããçµç¹çããã³ã³ãŒãçã«æ確ã«åºå¥ããããšãå¯èœã§ããããã ç§ã¯ãã¿ã€ãã³ã°ãšè¿œå ã®èšèªæ©èœã®äž¡æ¹ã倧奜ãã§ãã æ¶è²»è /éçºè ãšããŠãç§ã¯TSãJSã«ãªããã®ãè¿œå ãããšããäºå®ã«ã€ããŠã¯ããŸãæ°ã«ããŸããã çŽ æŽããããã®ããã ãããTC39ããããæãŸãªãã®ãªããç§ã¯æ°ã«ããŸããã
ããã¯èšèªã®æžãçŽãã§ãããã¿ããªã®ã³ãŒããå£ããŸãã
ãŸãããJust give me awesome stuffãã¯ãTypeScriptã®èšèšç®æšãšã¯æ ¹æ¬çã«ç°ãªããŸãã ãã°ããããã®ãå¿ èŠã§ãJavaScriptãšã®æŽåæ§ãæ°ã«ããªãå Žåã¯ã CoffeeScript ã Dart ã Haxeãªã©ã®å¥ã®èšèªãéžæããå¿ èŠããããŸãã ãã¡ãããTypeScriptã®æ¡çšã»ã©ããŸããããªãçç±ããããããããŸãã...
åé¡ãéãç¶ããåé¿çããããšè¿°ã¹ãŠãã人ã¯ãããããåé¿çã®äŸãæäŸããå¿ èŠããããŸã
partial
解決ãããã®ã«ã¯å€ãã®ãŠãŒã¹ã±ãŒã¹ããããŸãã ã»ãšãã©ãã¹ãŠã®èšèªæ§æã«ã¯ããããæå¹ãªå€ãã®ãŠãŒã¹ã±ãŒã¹ããããŸãããæ£åœãªçç±ãããéžæããå¿
èŠããããŸãã
ãç§ã¯ç·ã®è»ã倧奜ãã§ããã®ããã«ãç¹å®ã®èšèªæ©èœãæ±ãç¶ããŸãããåé¡ã®æ žå¿ã«å°éããŠããŸããããªãè»ã¯ç·ã§ããå¿ èŠãããã®ã§ããïŒ ããªããããªãã®è»ããªãç·ã§ããå¿ èŠããããã説æãããããããããªãã®æ¬åœã®å¿ èŠæ§ãæäŸããéããããªããããªãã®è»ãã©ããªè²ã§ããããå®éã«æ°ã«ããªããšããäºå®ã«ãªãŒãã³ã§ãããªãã°ã
æ£åœãªçç±ã§èªåè»äŒç€Ÿãã°ãªãŒã³ã«ãŒãçç£ããªãããšã決å®ãããšããçç±ã ãã§ãããªããããªãã®è»ãå¡ãçŽãæ¹æ³ãããªãã«æããããšãã©ã€ã¢ã³ã®çŸ©åã§ãããšããªããæããçç±ãããããŸããã
ïŒãããTypeScript 2.2ã§è¿œå ãããããã¯ã¹ã€ã³ã¯ã©ã¹ã¯ãããªãã®æ¬åœã®ããŒãºã§ãããšç§ãæãããšãéæããããã®è¯ãæ¹æ³ã§ãïŒ
interface Base {}
interface Constructor<T> {
new (...args: any[]): T;
prototype: T;
}
interface PartialClass {
foo(): void;
}
function PartialClass<B extends Constructor<Base>>(base: B): B & Constructor<PartialClass> {
return class extends base {
foo() {
console.log('foo');
}
};
}
class MyBase {
bar() {
console.log('bar');
}
}
const MyPartialBase = PartialClass(MyBase);
const instance = new MyPartialBase();
instance.bar();
instance.foo();
@kitsonkããã¯ã¹ã€ã³ã¯åããã®ã§ã¯ãããŸããã
æŒç¿ãšããŠãããã¯ã¹ã€ã³ã䜿çšããŠæ¬¡ã®ã³ãŒãåå²ãå®è£ ããŠã¿ãŠãã ããã
partial class Point {
readonly x: number;
readonly y: number;
}
partial class Point {
translate(dx: number, dy: number): Point {
return new Point(this.x + dx, this.y + dy);
}
}
æŒç¿ãšããŠãããã¯ã¹ã€ã³ã䜿çšããŠæ¬¡ã®ã³ãŒãåå²ãå®è£ ããŠã¿ãŠãã ãã
ããŠãèŠç¹ã«æ»ããŸããã...ã§ã¯ãèšèªæ©èœãææãã代ããã«ãäŸã§ã©ã®ãããªåé¡ã«å¯ŸåŠããããšããŠããŸããïŒ TypeScriptã§ã®åé¿çã¯ç°¡åãªã®ã§ã次ã®ããã«ãªããŸãã
class Point {
readonly x: number;
readonly y: number;
translate(dx: number, dy: number): Point {
return new Point(this.x + dx, this.y + dy);
}
}
ïŒãããŠãç§ãã¡ãå®å šäž»çŸ©è ã§ããå Žåã§ãããã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãªãããŸãïŒ
interface PointBase {
x: number;
y: number;
}
interface Constructor<T> {
new (...args: any[]): T;
prototype: T;
}
interface TranslatePointPartial {
translate(dx: number, dy: number): TranslatePointPartial;
}
function TranslatePointPartial<B extends Constructor<PointBase>>(base: B): B & Constructor<TranslatePointPartial> {
return class TranslatePointPartial extends base {
translate(dx: number, dy: number): TranslatePointPartial & PointBase {
return new TranslatePointPartial(this.x + dx, this.y + dy);
}
};
}
class Point {
readonly x: number;
readonly y: number;
}
const MyPoint = TranslatePointPartial(Point);
const instance = new MyPoint();
instance.x;
instance.y;
instance.translate(1, 2);
@ Elephant-Vessel
ãããèæ ®ãããšãJSã®çŽç²ãªã¿ã€ãã³ã°ãšãTSãæäŸããä»ã®èšèªæ§é ãšããçµç¹çããã³ã³ãŒãçã«æ確ã«åºå¥ããããšãå¯èœã§ããããã
çŸæç¹ã§ã¯ã2ã€ã解ãã»ããæ¹æ³ãããããŸããã çè«çã«ã¯ãæ§æçã«TypeScriptã«å€æãããCoffeeScriptã®èšèªãèšè¿°ãããã®é«æ°Žæºèšèªã䜿çšããŠãTSã®åã·ã¹ãã ã䜿çšããªãããæ°ããæ§ææ©èœãè¿œå ããããšãã§ããŸãããããã§ã¯ãããŸã§ã®ãšããããåŸãããŸããã ãããç®æšã§ããå Žåã¯ã代ããã«ãä»ã®å€ãã®ã°ãªãŒã³ãã£ãŒã«ãã®ã³ã³ãã€ã«ããJSãžã®èšèªã®1ã€ãéžæããæ¹ãè¯ãéžæã®ããã«æãããŸãã
ã¢ãžã¥ãŒã«ã ãã䜿ãã¹ããªã®ã§ããã®ãããªããšã¯èµ·ãããªããšèšã£ãŠããã®ã§ããïŒ åå空éã¯éæšå¥šãžã®éãé²ãã§ããŸããïŒ
確ãã«ãåå空éã¯ã©ãã«ãè¡ããŸããã ãããã¯ããã§ã«åºã䜿çšãããŠãããã¿ãŒã³ã®åãªãååã§ãããES6ã¢ãžã¥ãŒã«ã®äžçã§ã¯ãŸã ååã«æå³ããããŸãã ã¢ãžã¥ãŒã«ã¯ãŸããŸã人ã
ãã³ãŒããæŽçããæ¹æ³ã§ãããå€ãã®å€§ããªå¯æ¬¡çãªå©ç¹ããããŸãã ãã®äžçã§ã¯éšåçãªã¯ã©ã¹ã¯ã»ãšãã©æå³ããªããšèšã£ãŠããã ãã§ããããããšäºææ§ã®ãªãæ ¹æ¬çã«æ°ããçµç¹ãã¿ãŒã³ãè¿œå ããã®ã¯å¥åŠãªããšã§ãã äžçãå察æ¹åã«åããŠããŠã誰ãããè² è·ã«å¯äœçšã®ããã°ããŒãã«ã¹ã¯ãªããã¯çŽ æŽããããã¿ããªããäºãã®prototype
ããŒãã£ãŒããããã®ããã ã£ããšããããç§ãã¡ã¯éã£ãæ°æã¡ã«ãªããããããŸããã
@RyanCavanaugh
ããããããã§ã...ããããããŸãæå³ããããŸãã...ããããç§ãäœåºŠãèšã£ãããã«ããã®ã¹ã¬ããã§ããéšåã¯ã©ã¹ã¯ãã¹ãŠã³ãŒãçæãç°¡åã«ããããšã ãšæããŸã...ãããç§ãèŠãäž»ãªå©ç¹ã§ããããããTSã®æ©èœã®äŸ¡å€ããããŸã...ç§ãšç§ã¯ä»ã®å€ãã®ããšãæ³å®ããå¿ èŠããããŸãããããã¯åãªãæšæž¬ã§ãããçŸåšç§ã®CïŒã³ãŒããã倧éã®TSã³ãŒããçæããŠããŸã...ããããåé¡ã¯çæããããã®ãå®å šã«æ¡åŒµããæ¹æ³ã«ãªããŸãTSã³ãŒã??? ããã¯éšåçãªã¯ã©ã¹ã§çããã®ãã¯ããã«ç°¡åãªè³ªåã§ã...çŸåšãçæãããTSã³ãŒããã¡ã€ã«ã«ã«ã¹ã¿ã ã³ãŒããä¿æããããã«ããã¯ã«é Œã£ãŠããŸã...
ããããšã
ããã§ãåãããšã§ãããCïŒAPIã®ã¿ã€ãã¹ã¯ãªããããããã·ããçæãããããã®ãªããžã§ã¯ããã¿ã€ãã¹ã¯ãªããã§ç°¡åã«æ¡åŒµã§ããããã«ããããšèããŠããŸãã
ç§ã¯JSã¹ãã·ã£ãªã¹ãã§ã¯ãªãã®ã§ãäœãã足ããªãã«éããããŸããããªããªããã¯ã©ã¹ã®å®£èšãè€æ°ã®TSãã¡ã€ã«ã«åå²ã§ããïŒã³ã³ãã€ã«åŸã«1ã€ã®JSãã¡ã€ã«ã«1ã€ã®ã¯ã©ã¹å®£èšãããªãïŒçç±ãããããªãããã§ãã JSã®äžçã«ãšã£ãŠã®åé¡ã ç§ãèŠãéããæåãã1ã€ã®ãã¡ã€ã«ã«æžã蟌ãŸããŠãããã®ããã«ãJSã«ãšã£ãŠã¯ééçã§ãã ã€ãŸããéšåã¯ã©ã¹ã䜿çšãããã©ããã«é¢ä¿ãªããJSåºåã¯ãŸã£ããåãã«ãªããŸãããéçºè ã«ãšã£ãŠJSãªããžã§ã¯ãã®æ¡åŒµæ§ã®ã³ã¹ããé²ãããšãã§ããŸãã
@RyanCavanaugh
ç§ãå人çã«èšåããããã1ã€ã®ããšã¯ãç°ãªãTSãã¡ã€ã«ã§éšåã¯ã©ã¹ã䜿çšããŠES6ã¢ãžã¥ãŒã«ãäœæãããšãã«çºçããå¯èœæ§ã®ããããã±ãŒãžã³ã°ã®ãžã¬ã³ããäœããã®æ¹æ³ã§è§£æ±ºããããã«TSã³ã³ãã€ã©ã«äŸé ŒããŠããªãããšã§ã...å°ãªããšãç§ã«ã¯å®å šã«çã«ããªã£ãŠããŸãES6ã¢ãžã¥ãŒã«çšã«è€æ°ã®TSãã¡ã€ã«ãåäžã®jsãã¡ã€ã«ã«ã³ã³ãã€ã«ããŸã...ç¹°ãè¿ããŸãããéšåã¯ã©ã¹ã¯ã³ãŒãçæãå€§å¹ ã«æ¯æŽããŸã...ããŒã«ãä¿¡é Œã§ããæ¡åŒµæ§ã§ã¢ãã«ã®å€§éšåãäœæã§ããããã«ããŸã...
@kitsonk
ãç§ã¯ç·ã®è»ã倧奜ãã§ããã®ããã«ãç¹å®ã®èšèªæ©èœãæ±ãç¶ããŸãããåé¡ã®æ žå¿ã«å°éããŠããŸããããªãè»ã¯ç·ã§ããå¿ èŠãããã®ã§ããïŒ ããªããããªãã®è»ããªãç·ã§ããå¿ èŠããããã説æãããããããããªãã®æ¬åœã®å¿ èŠæ§ãæäŸããéããããªããããªãã®è»ãã©ããªè²ã§ããããå®éã«æ°ã«ããªããšããäºå®ã«ãªãŒãã³ã§ãããªãã°ã
ããããç§ã¯ããæ°æ©èœãæ±ããŠããŸããã èšèªã¯ç§ãæãããšãéæã§ãããšäœåºŠãèšãããŠããŸããã å¿ èŠãªãã®ã®äŸãïŒCïŒã§ïŒæäŸããŸãããã圹ç«ã€äŸã§ã¯ãå¿ èŠãªå Žæã«å°éããæ¹æ³ããŸã 確èªããŠããŸããã
æ£åœãªçç±ã§èªåè»äŒç€Ÿãã°ãªãŒã³ã«ãŒãçç£ããªãããšã決å®ãããšããçç±ã ãã§ãããªããããªãã®è»ãå¡ãçŽãæ¹æ³ãããªãã«æããããšãã©ã€ã¢ã³ã®çŸ©åã§ãããšããªããæããçç±ãããããŸããã
ã©ã€ã¢ã³ã¯ããã§ã¢ãã¬ãŒã¿ãŒã®ããã§ãåé¡ã解決ããŠããŸãã ãããçç±ã§ãã 圌ãèšèªã®æš©åšã§ããå Žåãæ¯åœèªã®æ©èœã䜿çšããŠãããè¡ãæ¹æ³ã®äŸãæäŸããã«ãç§ã®å¿ èŠæ§ãç解ãããã®èŠæ±ãåŽäžããåªåãããåã«ããããã圌ã¯åé¡ãéããã¹ãã§ã¯ãããŸããã ã³ã³ãã€ã«æã®ãœãªã¥ãŒã·ã§ã³ã欲ãããšè¿°ã¹ãŸããã ãããŠãç§ã¯ããªãåªç§ãªéçºè ã§ããããã°ããã®éãå€ãã®ç°ãªããããŸããªèšèªã§ããã°ã©ãã³ã°ãè¡ã£ãŠããŸããããããã¯ã¹ã€ã³æ§æã«ã¯ãŸã æ¬åœã«èŠåŽããŠããŸãã è€éã§ç解ãã«ãããã®ãã©ã®ããã«èšèªã«åãå ¥ãããããã¯ããããŸããããCïŒããåçšããŠãããããéšåçãªã¯ã©ã¹æ§æã®åªé ãã誰ããæåŠããŠããããã§ãã
ã©ã€ã¢ã³ã¯ããã§ã¢ãã¬ãŒã¿ãŒã®ããã§ãåé¡ã解決ããŠããŸãã ãããçç±ã§ãã 圌ãèšèªã®æš©åšã§ãããªãããããã圌ã¯ç§ã®å¿ èŠæ§ãç解ããåªåãããåã«åé¡ãéããã¹ãã§ã¯ãããŸãã
ð€
@RyanCavanaugh ãããªããå©ããããšåªåããããšãç§ã¯ç¥ã£ãŠããŸãã ãããŠãã®æç¹ã§ãç§ã¯ããã¯ã¹ã€ã³ãè©Šãããšã«ç§»ã£ãŠããŸãã ãŸãã¯åã«ç¶æ¿ããããã¯ç§ã¯ãã®ãããžã§ã¯ããæãéããããã«ãšãŠãæ¥ãã§ããã®ã§ããžã§ããªãã¯ã§ãããè¡ãæ¹æ³ãèŠèœãšããŠããŸãã ããŒã...
ç¶æ¿ãšåœåã«ãããç§ã¯æ¬¡ã®ããšãã§ããŸãã
class AddressBase // this is a code generated class
{
public address: string;
public city: string;
public state: string;
public zip: string;
constructor( jsonFromService: any )
{
this.OnInit( jsonFromService );
}
OnInit( jsonFromService: any )
{
// could use Object.assign here
this.address = jsonFromService.address;
this.city = jsonFromService.city;
this.state = jsonFromService.state;
this.zip = jsonFromService.zip;
}
}
class ContactBase // this is also a code generated class
{
public firstName: string;
public lastName: string;
constructor( jsonFromService: any )
{
this.OnInit( jsonFromService );
}
OnInit( jsonFromService: any )
{
// could use Object.assign here
this.firstName = jsonFromService.firstName;
this.lastName = jsonFromService.lastName;
}
}
// classes that extend the functionality of the code generated classes:
class Address extends AddressBase // subclass simply because I don't want to have to use AddressBase all over my codebase, and then refactor if I ever extend the class
{
}
class Contact extends ContactBase
{
public Addresses: Address[] = []; // THIS is the customization/extension that cannot be code generated.
OnInit( jsonFromService: any )
{
// note that jsonFromService receives a dto with a array of address info
super.OnInit( jsonFromService );
for ( let addr of jsonFromService.Addresses )
{
this.Addresses.push( new Address( addr ) );
}
}
}
ãããŠãããã¯ç§ã«ãšã£ãŠã¯ããŸããããŸãã ããã¯ããã»ã©ãããã§ã¯ãªããã³ãŒãã§çæãããã¯ã©ã¹ã«ãã³ãŒãã§äœ¿çšããããªãååã匷å¶ããŸãã ããããåã³ããã¯æ©èœããŸãã
çŸæç¹ã§ã¯ãéšåã¯ã©ã¹ã«åŒ·ãå察ããŠãã人ã¯ãéšåã¯ã©ã¹ã®æŠå¿µã誀解ããŠããã ãã§ãéšåã¯ã©ã¹ã¯éšåã¯ã©ã¹ã§ã¯ãªããã®ã ãšæã£ãŠããããã«æããŸãã
æ確ã«ããããã«ïŒéšåã¯ã©ã¹ã¯æ§ææ§é ã§ãããåãåäžã¯ã©ã¹ã®å®çŸ©ãè€æ°ã®ç©çãã¡ã€ã«ã«åå²ã§ããŸãã ããã§ã®ããŒã¯ãŒãã¯ãåãããšãåäžãã§ãã
TypeScriptã®ããã¥ã¡ã³ãã«ã¯ãéšåã¯ã©ã¹ã®èª€ã£ãå®çŸ©ãèšèŒãããŠããŸãïŒæåã®æ®µèœã¯https://www.typescriptlang.org/docs/handbook/mixins.html ïŒã
å®éã®éšåã¯ã©ã¹ã®æŠå¿µã®äŸïŒ
ãã¡ã€ã« "Point.generated.ts"ïŒ
partial class Point {
readonly x: number;
readonly y: number;
}
ãã¡ã€ã« "Point.codeByHand.ts"ïŒ
partial class Point {
constructor(x: number, y: number) {
this.x = x;
this.y = y;
}
translate(dx: number, dy: number): Point
{
return new Point(this.x + dx, this.y + dy);
}
}
ãããã¯ãPoint.jsãã«ã³ã³ãã€ã«ãããŸã-ãããŠååã¯ãã¡ã€ã«ã®ååããã§ã¯ãªããã¯ã©ã¹ã®ååããæ¥ãŸãïŒ
var Point = (function () {
function Point(x, y) {
this.x = x;
this.y = y;
}
Point.prototype.translate = function (dx, dy) {
return new Point(this.x + dx, this.y + dy);
};
return Point;
}());
ããã¯ã¹ã€ã³ã¯ããéšåã¯ã©ã¹ããšããŠäœ¿çšãããå ŽåïŒãããŠãããã¥ã¡ã³ãå ã®ãã®çšèªã¯èª€çšãããŠãããšåŒ·ãä¿¡ããŠããŸãïŒãå®éã«ã¯å€éç¶æ¿ãè¡šãhttps://en.wikipedia.org/wiki/Multiple_inheritance ïŒã
ãããã£ãŠãã芧ã®ãšãããå®éã®éšåã¯ã©ã¹ãšå€éç¶æ¿ãšãã2ã€ã®ç°ãªãããŒã«ã«ã€ããŠèª¬æããŸãã ãããã¯2ã€ã®ç°ãªãããŒã«ã§ãã ãããŠãä»ã®ããŒã«ãšåæ§ã«ãç¬èªã®ã¢ããªã±ãŒã·ã§ã³é åããããŸãã èšãæããã°ã倧工ã¯æšæ§ãå©çšã§ããªããšãã«æšæ§ã®ä»£ããã«ãã³ããŒã䜿çšãããããããŸãããããã³ããŒã¯é©åãªéå ·ã§ã¯ãããŸããã
ç§èŠããã®è°è«ã«ã¯æªæ¥ããªãã®ã§ããããã¹ãã§ãã å®éã®éšåã¯ã©ã¹ã®æè¡çãªåé¡ã¯ãŸã èŠåœãããŸããããå°ãªããšãä»ã®ãšãããããŒã ã¯å®éã«ããããå®è£ ããããšãæãã§ããŸããã
TSããŒã ã¯ãå¯èœã§ããã°TSåºæã®æ©èœãå®è£ ããããšãæãã§ããŸããã ãã£ãšè©±ãåãããå Žåã¯ããããããè¯ãå Žæã§ãïŒ https ïŒ
TC39åŽã«ãã¡ãŒã«ããŒã¹ã®ãªããžããªã§ã¯ãªãããã®ããšã«ã€ããŠè©±ãåãããã®GitHubãªããžããªãããããšãé¡ã£ãŠããŸãïŒ/
@greendimka
çŸæç¹ã§ã¯ãéšåã¯ã©ã¹ã«åŒ·ãå察ããŠãã人ã¯ãéšåã¯ã©ã¹ã®æŠå¿µã誀解ããŠããã ãã§ãéšåã¯ã©ã¹ã¯éšåã¯ã©ã¹ã§ã¯ãªããã®ã ãšæã£ãŠããããã«æããŸãã
æ確ã«ããããã«ïŒéšåã¯ã©ã¹ã¯æ§ææ§é ã§ãããåãåäžã¯ã©ã¹ã®å®çŸ©ãè€æ°ã®ç©çãã¡ã€ã«ã«åå²ã§ããŸãã ããã§ã®ããŒã¯ãŒãã¯ãåãããšãåäžãã§ãã
ããã®èª°ããéšåã¯ã©ã¹ã®å®çŸ©ã誀解ããŠãããšã¯æããŸãããããããJavaScriptã®ã¯ã©ã¹ã®å®çŸ©ã誀解ããŠãããšæããŸãã
JavaScriptã¯ã©ã¹ã¯ãä»ã®åºã䜿çšãããŠããèšèªã§èŠãããã¯ã©ã¹ãšãŸã£ããåãã§ãããšããå°è±¡ãåããŠããå Žåã¯ãä»ã®äººã誀解ããŠããããã«èŠãããããããŸããã
ãã ãããã®ãã£ã¹ã«ãã·ã§ã³ã§äœåºŠãèšãããŠããããã«ãå°ãªããšã1åã¯æ瀺çã«èšã£ãããšããããšæããŸããJavaScriptã¯ã©ã¹ã¯ãå¿ é ã®å®£èšåæ§é ã§ã¯ãããŸããã
ãããã¯ãã¹ããŒãã¡ã³ããå®è¡ããããŸã§ååšããŸããã
ãããã®å®çŸ©ã¯çªç¶å€ç°ã«äŸåããŠããŸãã
ããã«ãããç¶æ¿ã«é¢ããŠã¯ããã§ã«è匱ã§é åºã«äŸåããŠããŸãã
ããã¯äœåºŠãç¶ãå¯èœæ§ããããŸã...
@cosmoKenney
è€éã§ç解ãã«ãããã®ãã©ã®ããã«èšèªã«åãå ¥ãããããã¯ããããŸããããCïŒããåçšããŠãããããéšåçãªã¯ã©ã¹æ§æã®åªé ãã誰ããæåŠããŠããããã§ãã
ç§ã¯ãããæ£ãããšã¯æ¬åœã«æããŸããã 誰ããCïŒãæããŠãããJavaããã°ã©ããŒã倧奜ãã§ãðãTypeScriptã¯ãéããããããã«éãã¯ãããŸããã
@aluanhaddad
JavaScriptã§ã®ã¯ã©ã¹ã®å®çŸ©ã誀解ããŠããã®ã§ã¯ãªãããšæããŸã...
åŒçšä»¥äžã®å ŽåïŒTypeScriptã«ã€ããŠè©±ããŠããŸãã
ç§ãèšã£ãããã«ïŒJavaScriptã®æ§é ã«ã³ã³ãã€ã«ãããTypeScriptã§å®éã®éšåã¯ã©ã¹ãå®è£
ããæè¡çãªåé¡ã¯èŠãããŸããã
@greendimka
åŒçšä»¥äžã®å ŽåïŒTypeScriptã«ã€ããŠè©±ããŠããŸãã
ç§ãèšã£ãããã«ïŒJavaScriptã®æ§é ã«ã³ã³ãã€ã«ãããTypeScriptã§å®éã®éšåã¯ã©ã¹ãå®è£ ããæè¡çãªåé¡ã¯èŠãããŸããã
ãã®æºè¶³åºŠã®åé¡ã¯ãTypeScriptã¯ã©ã¹ã®ãããªãã®ã¯ãããŸããã
ããå°å¹ŽïŒ äžéšã®äººã
ã¯çç±ãšããŠäœãã䜿çšããŸãã
ããããŸãããTypeScriptã«ã¯ã¯ã©ã¹ããããŸããã ãŸãã¯TypeScriptã¯ã©ã¹ã ãŸãã¯äœã§ãã ãªãã§ãããã
ã€ãŸããJavaScriptã¯ã©ã¹ã§ãã ç§ã¯æã è¡åŠè ã§ããããšã«çœªãç¯ããŸãããã©ã®æ©èœãç°¡åã«è¿œå ã§ããããè°è«ããåã«ãã¯ã©ã¹ãšããçšèªã®å®çŸ©ã«åæããå¿ èŠãããããããã®åºå¥ãéåžžã«å ·äœçã«è¡ã£ãŠããŸãã
ç§ãã¡ãã¯ã©ã¹ã«ã€ããŠè©±ããšããç§ãã¡ãåãããšãæå³ããã®ã§ã¯ãªãããããèªç¥çäžååãåŒãèµ·ãããçžäºç解ã劚ãããšæããŸãã
ç§ãã¡ãã¯ã©ã¹ã«ã€ããŠè©±ããšããç§ãã¡ãåãããšãæå³ããã®ã§ã¯ãªãããããèªç¥çäžååãåŒãèµ·ãããçžäºç解ã劚ãããšæããŸãã
å®å šã«åæããïŒ
å®éããã®ãããã¯ã®æåã®æçš¿ã¯ãèŠæ±ãããå 容ãå®å šã«èª¬æããŠããããããã®è°è«ã«ã¯å°æ¥æ§ããããŸãã:)
@greendimkaã¯ããTypeScriptã«ã¯éšåçãªã¯ã©ã¹ããªãããã«æããããããå°æ¥æ§ã¯ãããŸããã ç§ã®èãã§ã¯ãããã¯è¯ãããšã§ãã
ãããã誀解ã誀解ã¯è¯ãããšã§ã¯ãªãã®ã§ãç§ã¯ãŸã ããªããšè©±ãåã£ãŠããŸãã
æ®å¿µãªãããããªããèå³ããªãããã§ã
A. JavaScriptãã¯ã©ã¹ãšã¯äœãã説æãããšãæ°ãå€ãã£ãŠãç°¡åã«éšååã§ããããšã«åæããããã«ãªããããããŸããã
B. JavaScriptã¯ã©ã¹ãšã¯äœãã«ã€ããŠä»ã®äººããåŠã³ãå察ã®èŠç¹ãç解ããå¿ èŠããããŸãã
ããã¯æ®å¿µã ãšæããŸããããããããã°ãã以äžã話ãããŸããã
ç§ã¯ãããªãè°è«ã«ãå察ããŠããŸããã ããããããã§ã¯ãéšåã¯ã©ã¹ã¯å®è£
ãããªãïŒå°ãªããšãçŸåšã¯ïŒãšäœåºŠãè¿°ã¹ãããŠããŸãã ã§ããããä»ã®ããšã«éäžããã»ãããããšæããŸãã ãã¶ããTypeScriptã¯å°æ¥å€æŽãããå¯èœæ§ããããŸãã
AãšBã«é¢é£ããŠãç§ã¯JavaScriptãå«ãã§ãã ããããç§ã¯ãããéåžžã«ããç¥ã£ãŠããããã¡ãããã¯ã©ã¹ããã®äžã§ã©ã®ããã«ãè¡šããããããç¥ã£ãŠããŸãã ãããããã®å
šäœçãªè°è«ã®ãã€ã³ãã¯ãJavaScriptãå€æŽããããšã§ã¯ãªãããäœã¬ãã«ãã®JavaScriptã³ãŒããçæããé«æ¬¡èšèªãšããŠã®TypeScriptã®æ©èœãåäžãããããšã§ããã
TypeScriptãC ++ã«ãJavaScriptãæ©æ¢°èªã«çœ®ãæãããšæ³åããŠã¿ãŠãã ããã ãã·ã³ã³ãŒãã«ã¯ãC ++ã«ååšããã»ãšãã©ã®æŠå¿µãæ¬ ããŠããŸãã ããããC ++ã¯ãããåå ã§é²åãåæ¢ããå¿
èŠããããŸããïŒ ãã¡ããéããŸãã äžéšã®å€ãã³ã³ãã€ã©ã¯ã³ã³ãã€ã«ã§ããªããããé²åãåæ¢ããå¿
èŠããããŸããïŒ ãã¡ãããããã-éçºè
ã«æ°ããæ©èœãæäŸãã圌ãã«äŒããŸãïŒããã¯æ°ããã³ã³ãã€ã©ã§åäœããŸã-ããªãïŒéçºè
ïŒã¯ããã䜿çšãããã©ããã決å®ããŸãã
@aluanhaddad
ç·ããç·ã æ¹çšåŒã®Javascriptéšåãæ°ã«ããã®ã¯èª°ã§ããïŒ TypeScriptã¯äžã®ã¬ã€ã€ãŒã§ããããããè¡šçŸãããå ŽåããããŸãã å€ã4GLãš3GLã®è°è«ãèŠããŠããŸããïŒ TypeScriptã¯Javascriptã«å¯Ÿãããã®ã§ããã4GLã¯3GLã«å¯Ÿãããã®ã§ãã ãŸããTypeScriptã¯åŒ·åãªåãæã€ES6ã§ãããããéšåã¯ã©ã¹ã¯TypeScriptã®ããŒããããã®ç¯å²å€ã§ãããšããè°è«ã¯LAMEã§ãã MixinãGenericsãModulesãName SpacesãTypeCastingãå
¥æããŸããã ã§ã¯ãããŒã·ã£ã«ã¯ã©ã¹ã§ããã«äžæ©é²ãã§ã¿ãŸãããïŒ
éšåã¯ã©ã¹ã«å¿ èŠãªã®ã¯ãåäžã®TypeScriptã¯ã©ã¹ã®ããŸããŸãªå®çŸ©ãã¹ãŠã1ã€ã®æçµçãªäœã¬ãã«ã®3GLJavascriptã¯ã©ã¹å®çŸ©ã«çµ±åã§ããããã«ããã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã ãã§ãã æçµçãªJavaScriptã¯ã©ã¹å®çŸ©ã«åœ±é¿ã¯ãªãã¯ãã§ãããïŒ Javascriptãžã®å€æã®æçµææç©ããã®è°è«ã®äžéšã§ããããã®ã¯ãªãã§ããïŒ çå£ã«ã
@cosmoKenney ãåãåããES.nextã ããã¯ãJavaScriptéçºè ãå€æãã倧ããªã»ãŒã«ã¹ãã€ã³ãã§ãã ãã£ãšäœããå¿ èŠãªå Žåã¯ãééã£ãèšèªãèŠãŠããããšã«ãªããŸãã 代ããã«Scala.jsãè©ŠããŠã¿
ç·šéïŒES.nextã§ã¯ãéšåã¯ã©ã¹ãã«ã¹ã¿ã ã¢ãžã¥ãŒã«ããŒããŒã§å®è£ ã§ãããšããèå³æ·±ãããšã«æ°ã¥ããŸããã 䜿çšããå Žå
import {MyClass} from './myclass.*'
ããŒããŒã¯ãã¯ã€ã«ãã«ãŒãã«äžèŽããä»»æã®ãã¡ã€ã«ãããšã¯ã¹ããŒãããããã¹ãŠã®MyClasså®çŸ©ãåäžã®ã¯ã©ã¹ã«ããŒãžãããããæäŸã§ããŸãã
@spionç§ã¯ããªããããããES.nextéšåã¯ã©ã¹ãšããŠéåžžã«æ£ããåç
§ããŠããæ¹æ³ã奜ãã§ãã ãã©ãŠã¶ãªã©ã®ESã¢ãžã¥ãŒã«ããŒããŒããŸãã¯SystemJSãªã©ã®ããŒããŒããªãã£ã«ã¯ãéšåã¯ã©ã¹ããµããŒãããŸãã
TypeScriptã¬ãã«ã§ãã®æ©èœãè¿œå ããéã®äž»ãªåé¡ã®1ã€ã¯ãããŒããŒãããã±ãŒãžã£ãŒãªã©ã®æ¢åã®ããŒã«ãç Žæããããšã§ãã äžæ¹ãECMAScriptã§æå®ãããŠããå Žåããããã®ããŒã«ã¯ãã¹ãŠæ©èœãå®è£
ããTypeScriptã¯ãããã®ããŒã«ãã¹ãŠãšã®äºææ§ãç¶æããŸãã
Scala.jsã«é¢ããŠã¯ééããªãããªãã«åæããŸã
@cosmoKenney
MixinãGenericsãModulesãName SpacesãTypeCastingãå ¥æããŸããã ã§ã¯ãããŒã·ã£ã«ã¯ã©ã¹ã§ããã«äžæ©é²ãã§ã¿ãŸãããïŒ
TypeScriptã«èŠãããããã¯ã¹ã€ã³ã¯ãTypeScriptã_types_ããECMAScriptãã¶ã€ã³ãã¿ãŒã³ã§ãã
ãžã§ããªãã¯ã¯åã·ã¹ãã ã®æ©èœã§ãããããé©çšãããŸããã
ã¢ãžã¥ãŒã«ã¯ECMAScriptã®æ©èœã§ãã
åå空éã¯ãECMAScriptãã¶ã€ã³ãã¿ãŒã³ã®æ§æç³è¡£æ§æã§ããã圢åŒåãããŠããŸãã
TypeCastingã¯TypeScriptã«ã¯ååšããŸããã
@aluanhaddadãªããããå®è¡æã®ãã®ãšããŠäœãç¶ããã®ã§ããïŒ ã¢ãžã¥ãŒã«ããŒããŒãšããã©ã³ã¹ãã€ã«ãšã¯äœã®é¢ä¿ããªããã¹ãŠã®ãã®ã
+1
@cosmoKenney
@aluanhaddadãªããããå®è¡æã®ãã®ãšããŠäœãç¶ããã®ã§ããïŒ ã¢ãžã¥ãŒã«ããŒããŒãšããã©ã³ã¹ãã€ã«ãšã¯äœã®é¢ä¿ããªããã¹ãŠã®ãã®ã
ããã¯æ£ãããããŸããã
SystemJSãšWebpackã®ãšã³ã·ã¹ãã ãèŠããšãããã§ãªãããšãããããŸãã
ããã«äŒçµ±çã§å å®ãªgulpã¯ãŒã¯ãããŒã¯ãå ¥åãã¡ã€ã«ãšåºåãã¡ã€ã«ã®éã®å¯Ÿå¿ã«äŸåããŠããŸãã
+1
ããŒã«ã䜿çšããŠåºæ¬ã¯ã©ã¹ã®ã»ãšãã©ãçæããŠããããïŒã¢ãã«ã«å€æŽããã£ãå Žåã«èªååããããïŒãéšåã¯ã©ã¹ãå¿ èŠã§ãã 次ã«ãéšåã¯ã©ã¹ã䜿çšããŠãå¥ã®ãã¡ã€ã«ã®ã¯ã©ã¹ã«æ©èœãè¿œå ããããŒã«ïŒã¯ã©ã¹ãèªåçæããïŒã«ãã£ãŠäžæžããããªãããã«ããŸãã
æãåèã«ãªãã³ã¡ã³ã
éšåã¯ã©ã¹ã®ãŠãŒã¹ã±ãŒã¹ã¯ãçæããããããã·ã¯ã©ã¹ã§ãã ããšãã°ãWebAPIãŸãã¯SignalRã©ãããŒã çæããããããã·ã¯ã©ã¹ãã«ã¹ã¿ã ããžãã¯ã§æ¡åŒµã§ãããšæ¬åœã«äŸ¿å©ã§ãã ç¹ã«ã¢ãã«ã®ã¯ã©ã¹ãçæãããšãã¯ãAPIããè¿ãããã¢ãã«ã¯ã©ã¹ã«ããžãã¹ããžãã¯ãçŽæ¥ã¢ã¿ããã§ãããšäŸ¿å©ã§ãã