TypeScriptã§ã¿ã€ãã»ãŒããªé¢æ°åæã®åãæ¢æ±ããŸããããå®è·µçãªäŸãšã°ããŒãã«ãªæŽå¯ãéããŠãã¯ãªãŒã³ã§åå©çšå¯èœãä¿å®ããããã³ãŒãã®æžãæ¹ãåŠã³ãŸãã
TypeScriptã®é¢æ°åããã°ã©ãã³ã°ïŒã¿ã€ãã»ãŒããªé¢æ°åæ
ãœãããŠã§ã¢éçºã®åéã§ã¯ãå ç¢ã§ä¿å®ãããããçè§£ããããã³ãŒããäœæããããã®æ¢æ±ã¯çµããã®ãªãæ ã§ãã颿°åããã°ã©ãã³ã°ã¯ããã®äžå€æ§ãçŽç²é¢æ°ãããã³é¢æ°åæã«éç¹ã眮ãããšã§ããããã®ç®æšãéæããããã®åŒ·åãªããŒã«ããããæäŸããŸããéçåä»ãã远å ããJavaScriptã®ã¹ãŒããŒã»ããã§ããTypeScriptãšçµã¿åããããšãã¿ã€ãã»ãŒããªé¢æ°åæã®å¯èœæ§ãè§£ãæŸã¡ãããä¿¡é Œæ§ãé«ãã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãããã®ããã°æçš¿ã§ã¯ãTypeScriptã§ã®é¢æ°åæã®è€éããæãäžããäžçäžã®éçºè ã«é©çšå¯èœãªå®è·µçãªäŸãšæŽå¯ãæäŸããŸãã
颿°åããã°ã©ãã³ã°ã®ååã®çè§£
颿°åæã«å ¥ãåã«ã颿°åããã°ã©ãã³ã°ã®äžæ žãšãªãååãçè§£ããããšãéèŠã§ãããããã®ååã¯ãäºæž¬å¯èœã§ãã¹ãå¯èœã§ããšã©ãŒãçºçãã«ããã³ãŒããäœæããããã«ç§ãã¡ãå°ããŸãã
- äžå€æ§ïŒäœæãããããŒã¿ã¯å€æŽã§ããŸãããæ¢åã®ããŒã¿ã倿Žãã代ããã«ãå€ãããŒã¿ã«åºã¥ããŠæ°ããããŒã¿ãäœæããŸããããã¯ãæå³ããªãå¯äœçšãé²ãããããã°ã容æã«ããã®ã«åœ¹ç«ã¡ãŸãã
- çŽç²é¢æ°ïŒçŽç²é¢æ°ãšã¯ãåãå ¥åãäžããããå Žåãåžžã«åãåºåãçæããå¯äœçšããªãïŒã¹ã³ãŒãå€ã®ãã®ã倿ŽããªãïŒé¢æ°ã®ããšã§ããããã«ããã颿°ã¯äºæž¬å¯èœã«ãªãããã¹ãã容æã«ãªããŸãã
- ãã¡ãŒã¹ãã¯ã©ã¹é¢æ°ïŒé¢æ°ã¯ãã¡ãŒã¹ãã¯ã©ã¹ã®åžæ°ãšããŠæ±ãããŸããã€ãŸãã倿°ã«å²ãåœãŠãããä»ã®é¢æ°ãžã®åŒæ°ãšããŠæž¡ãããã颿°ããå€ãšããŠè¿ãããã§ããŸããããã¯é¢æ°åæã®åºæ¬ã§ãã
- 颿°åæïŒ2ã€ä»¥äžã®é¢æ°ãçµã¿åãããŠæ°ãã颿°ãäœæããããã»ã¹ããã颿°ã®åºåãæ¬¡ã®é¢æ°ã®å ¥åã«ãªããããŒã¿ã®å€æãã€ãã©ã€ã³ã圢æããŸãã
颿°åæã®å
颿°åæã«ã¯ãå€ãã®å©ç¹ããããŸãã
- ã³ãŒãã®åå©çšæ§ïŒå°ãããçŠç¹ãçµã£ã颿°ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŸããŸãªéšåã§åå©çšã§ããŸãã
- èªã¿ãããã®åäžïŒé¢æ°ãåæãããšãè€éãªæäœãæç¢ºãã€ç°¡æœãªæ¹æ³ã§è¡šçŸã§ããŸãã
- ãã¹ãå¯èœæ§ã®åäžïŒçŽç²é¢æ°ã¯ãåé¢ããŠãã¹ãããã®ãç°¡åã§ãã
- å¯äœçšã®è»œæžïŒé¢æ°åããã°ã©ãã³ã°ã¯ãå¯äœçšãæå°éã«æããã³ãŒãã®äœæãæšå¥šããŸãã
- ä¿å®æ§ã®åäžïŒ1ã€ã®é¢æ°ã®å€æŽãã³ãŒãã®ä»ã®éšåã«åœ±é¿ãäžããå¯èœæ§ã¯äœããªããŸãã
TypeScriptã§ã®ã¿ã€ãã»ãŒããªé¢æ°åæ
TypeScriptã®éçåä»ãã¯ã颿°åæã®å©ç¹ãå€§å¹ ã«åäžãããŸããTypeScriptã¯åæ å ±ãæäŸããããšã§ãéçºäžã«ãšã©ãŒããã£ãããã颿°ãæ£ãã䜿çšãããããŒã¿ãäºæããªãåã®äžäžèŽãªãã«åæãã€ãã©ã€ã³ãæµããããã«ããŸããããã«ãããå€ãã®ã©ã³ã¿ã€ã ãšã©ãŒã鲿¢ãããã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãã¯ããã«å®å šã«ãªããŸãã
åºæ¬çãªé¢æ°åæã®äŸ
ç°¡åãªäŸãèããŠã¿ãŸããããæååã«ãã¬ãã£ãã¯ã¹ã远å ãã颿°ãšãæååã倧æåã«å€æãã颿°ã®2ã€ããããšããŸãã
function addPrefix(prefix: string, text: string): string {
return prefix + text;
}
function toUppercase(text: string): string {
return text.toUpperCase();
}
次ã«ããããã®é¢æ°ãåæããŠããã¬ãã£ãã¯ã¹ã远å ããããã¹ãã倧æåã«å€æããæ°ãã颿°ãäœæããŸãããã
function compose(f: (arg: T) => U, g: (arg: U) => V): (arg: T) => V {
return (arg: T) => g(f(arg));
}
const addPrefixAndUppercase = compose(addPrefix.bind(null, 'Greeting: '), toUppercase);
const result = addPrefixAndUppercase('hello world');
console.log(result); // Output: GREETING: HELLO WORLD
ãã®äŸã§ã¯ãcompose颿°ã¯ã2ã€ã®é¢æ°ïŒfãšgïŒãåŒæ°ãšããŠåããæåã«fãé©çšããæ¬¡ã«å
¥åã«gãé©çšããæ°ãã颿°ãè¿ãæ±çšé¢æ°ã§ããTypeScriptã³ã³ãã€ã©ãŒã¯åãæšè«ããfã®åºåãgã®å
¥åãšäºææ§ãããããšãä¿èšŒããŸãã
3ã€ä»¥äžã®é¢æ°ã®åŠç
åºæ¬çãªcompose颿°ã¯ã3ã€ä»¥äžã®é¢æ°ãåŠçããããã«æ¡åŒµã§ããŸããreduceRightã¡ãœããã䜿çšãããããå
ç¢ãªå®è£
ãæ¬¡ã«ç€ºããŸãã
function compose(...fns: Array<(arg: any) => any>): (arg: T) => any {
return (arg: T) => fns.reduceRight((acc, fn) => fn(acc), arg);
}
const addPrefix = (prefix: string) => (text: string): string => prefix + text;
const toUppercase = (text: string): string => text.toUpperCase();
const wrapInTags = (tag: string) => (text: string): string => `<${tag}>${text}${tag}>`;
const addPrefixToUpperAndWrap = compose(
wrapInTags('p'),
toUppercase,
addPrefix('Hello: ')
);
const finalResult = addPrefixToUpperAndWrap('world');
console.log(finalResult); // Output: HELLO: WORLD
ãã®ããæ±çšæ§ã®é«ãcompose颿°ã¯ãå¯å€æ°ã®é¢æ°ãåãå
¥ããå³ããå·Šã«ãããããã§ãŒã³ããŸãããã®çµæãè€éãªããŒã¿å€æãæ§ç¯ããããã®éåžžã«æè»ã§ã¿ã€ãã»ãŒããªæ¹æ³ãå®çŸããŸããäžèšã®äŸã¯ã3ã€ã®é¢æ°ãåæããæ¹æ³ã瀺ããŠããŸããããŒã¿ã®æµããæç¢ºã«ç¢ºèªã§ããŸãã
颿°åæã®å®çšçãªå¿çš
颿°åæã¯ãããŸããŸãªã·ããªãªã§åºãé©çšã§ããŸããããã€ãã®äŸã次ã«ç€ºããŸãã
ããŒã¿å€æ
ããŒã¿ããŒã¹ããååŸãããŠãŒã¶ãŒããŒã¿ãåŠçããããšãæ³åããŠãã ããïŒäžçå ±éã®ã·ããªãªïŒãç¹å®ã®åºæºã«åºã¥ããŠãŠãŒã¶ãŒããã£ã«ã¿ãªã³ã°ããããŒã¿ïŒæ¥ä»ãç¹å®ã®åœ¢åŒã«å€æãããªã©ïŒã倿ããŠããã衚瀺ããå¿ èŠãããå ŽåããããŸãã颿°åæã¯ããã®ããã»ã¹ãåçåã§ããŸããããšãã°ãããŸããŸãªã¿ã€ã ãŸãŒã³ã®ãŠãŒã¶ãŒã«ãµãŒãã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ãèããŠã¿ãŸããããåæã«ã¯ã次ã®é¢æ°ãå«ãŸããå ŽåããããŸãã
- å ¥åããŒã¿ã®æ€èšŒã
- æ¥ä»æååã®è§£æã
- æ¥ä»ããŠãŒã¶ãŒã®ããŒã«ã«ã¿ã€ã ãŸãŒã³ã«å€æããŸãïŒMoment.jsãdate-fnsãªã©ã®ã©ã€ãã©ãªã掻çšããŸãïŒã
- 衚瀺çšã«æ¥ä»ããã©ãŒãããããŸãã
ãããã®ã¿ã¹ã¯ã¯ãããããå°ããåå©çšå¯èœãªé¢æ°ãšããŠå®è£ ã§ããŸãããããã®é¢æ°ãåæãããšãããŒã¿å€æã®ããã®ç°¡æœã§èªã¿ããããã€ãã©ã€ã³ãäœæã§ããŸãã
UIã³ã³ããŒãã³ãã®åæ
ããã³ããšã³ãéçºã§ã¯ã颿°åæã䜿çšããŠãåå©çšå¯èœãªUIã³ã³ããŒãã³ããäœæã§ããŸããèšäºã衚瀺ããWebãµã€ãã®æ§ç¯ãæ€èšããŠãã ãããåèšäºã«ã¯ãã¿ã€ãã«ãäœæè ãæ¥ä»ãããã³ã³ã³ãã³ããå¿ èŠã§ãããããã®åèŠçŽ ã®HTMLãçæããå°ããçŠç¹ãçµã£ã颿°ãäœæããããããåæããŠå®å šãªèšäºã³ã³ããŒãã³ããã¬ã³ããªã³ã°ã§ããŸããããã«ãããã³ãŒãã®åå©çšæ§ãšä¿å®æ§ãåäžããŸããReactãVue.jsãªã©ã®å€ãã®ã°ããŒãã«UIãã¬ãŒã ã¯ãŒã¯ã¯ãã³ã³ããŒãã³ãåæãäžæ žãšãªãã¢ãŒããã¯ãã£ãã¿ãŒã³ãšããŠæ¡çšããŠããã颿°åããã°ã©ãã³ã°ã®ååãšèªç¶ã«äžèŽããŠããŸãã
Webã¢ããªã±ãŒã·ã§ã³ã®ããã«ãŠã§ã¢
Webã¢ããªã±ãŒã·ã§ã³ïŒNode.jsããã³Express.jsãKoa.jsãªã©ã®ãã¬ãŒã ã¯ãŒã¯ã§æ§ç¯ããããã®ãªã©ïŒã§ã¯ãããã«ãŠã§ã¢é¢æ°ãèŠæ±ãåŠçããããã«åæãããããšããããããŸããåããã«ãŠã§ã¢é¢æ°ã¯ãç¹å®ã®ã¿ã¹ã¯ïŒèªèšŒããã®ã³ã°ããšã©ãŒåŠçãªã©ïŒãå®è¡ããŸãããããã®ããã«ãŠã§ã¢é¢æ°ãåæãããšãæç¢ºã§çµç¹åãããèŠæ±åŠçãã€ãã©ã€ã³ãäœæã§ããŸãããã®ã¢ãŒããã¯ãã£ã¯ãåç±³ããã¢ãžã¢ãŸã§ãããŸããŸãªå°åã§äžè¬çã§ãããå ç¢ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®åºæ¬ã§ãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
éšåé©çšãšã«ãªãŒå
éšåé©çšãšã«ãªãŒåã¯ã颿°åæãè£å®ãã匷åãªãã¯ããã¯ã§ããéšåé©çšã«ã¯ã颿°ã®åŒæ°ã®äžéšãåºå®ããŠãåŒæ°ã®æ°ãå°ãªãæ°ãã颿°ãäœæããããšãå«ãŸããŸããã«ãªãŒåã¯ãè€æ°ã®åŒæ°ãåã颿°ãããããããåäžã®åŒæ°ãåãäžé£ã®é¢æ°ã«å€æããŸãããããã®ãã¯ããã¯ã䜿çšãããšã颿°ãããæè»ã«ããåæããããããããšãã§ããŸããé貚æç®ã®äŸãèããŠã¿ãŸããããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããªã¢ã«ã¿ã€ã ã®çºæ¿ã¬ãŒãã«åºã¥ããŠé貚ãæç®ããå¿ èŠãããããšããããããŸãã
function convertCurrency(rate: number, amount: number): number {
return rate * amount;
}
// Partial application
const convertUSDToEUR = convertCurrency.bind(null, 0.85); // Assuming 1 USD = 0.85 EUR
const priceInUSD = 100;
const priceInEUR = convertUSDToEUR(priceInUSD);
console.log(priceInEUR); // Output: 85
ãšã©ãŒåŠç
颿°ãåæãããšãã¯ããšã©ãŒã®åŠçæ¹æ³ãæ€èšããŠãã ããããã§ãŒã³å
ã®1ã€ã®é¢æ°ããšã©ãŒãã¹ããŒãããšãåæå
šäœã倱æããå¯èœæ§ããããŸããtry...catchãããã¯ãã¢ããïŒEitherãŸãã¯Resultã¢ãããªã©ïŒããŸãã¯ãšã©ãŒåŠçããã«ãŠã§ã¢ãªã©ã®ãã¯ããã¯ã䜿çšããŠããšã©ãŒãé©åã«ç®¡çã§ããŸããã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ãããŸããŸãªãœãŒã¹ïŒAPIãããŒã¿ããŒã¹ããŠãŒã¶ãŒå
¥åïŒããååŸããããšã©ãŒãå°ååºæã§ããå¯èœæ§ãããããïŒãããã¯ãŒã¯ã®åé¡ãªã©ïŒãå
ç¢ãªãšã©ãŒåŠçãå¿
èŠã§ããéäžåãã®ã³ã°ãšãšã©ãŒå ±åãäžå¯æ¬ ã«ãªãã颿°åæããšã©ãŒåŠçã¡ã«ããºã ãšçµ¡ã¿åãããããšãã§ããŸãã
颿°åæã®ãã¹ã
颿°åæã®ãã¹ãã¯ããã®æ£ç¢ºæ§ãä¿èšŒããããã«éåžžã«éèŠã§ãã颿°ã¯äžè¬çã«çŽç²ã§ããããããã¹ããç°¡åã«ãªããŸããå颿°ãåå¥ã«ãŠããããã¹ãããŠãããç¹å®ã®å ¥åãæäŸããåºåãæ€èšŒããããšã§ãåæããã颿°ããã¹ãã§ããŸããäžçäžã®ããŸããŸãªå°åã§äžè¬çã«äœ¿çšãããŠããJestãMochaãªã©ã®ããŒã«ã¯ããããã®åæã®ãã¹ãã«å¹æçã«äœ¿çšã§ããŸãã
ã°ããŒãã«ããŒã åãã®TypeScriptã®å©ç¹
TypeScriptã¯ãç¹ã«ã°ããŒãã«ãªãœãããŠã§ã¢éçºããŒã ã«ãç¹å®ã®å©ç¹ãæäŸããŸãã
- ã³ã©ãã¬ãŒã·ã§ã³ã®æ¹åïŒæç¢ºãªåå®çŸ©ã¯ããã¥ã¡ã³ããšããŠæ©èœããããŸããŸãªããã¯ã°ã©ãŠã³ããæã¡ãããŸããŸãªã¬ãã«ã®çµéšãæã€éçºè ãã³ãŒãããŒã¹ãçè§£ããè²¢ç®ãããããªããŸãã
- ãã°ã®åæžïŒã³ã³ãã€ã«æã®åãã§ãã¯ã«ããããšã©ãŒãæ©æã«ãã£ãããããæ¬çªç°å¢ã«å°éãããã°ã®æ°ãæžããŸããããã¯ã忣ããŒã å šäœã§ç°å¢ã«ã°ãã€ããçããå¯èœæ§ãããããéèŠã§ãã
- ä¿å®æ§ã®åäžïŒåå®å šæ§ã«ãããæ¢åã®æ©èœãæãªãããšãªããã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãšå€æŽã®å°å ¥ã容æã«ãªããŸããããã¯ããããžã§ã¯ããé²åããããŒã ãæéã®çµéãšãšãã«å€åããã«ã€ããŠéèŠã«ãªããŸãã
- ã³ãŒãã®å¯èªæ§ã®åäžïŒTypeScriptã®åã¢ãããŒã·ã§ã³ãšã€ã³ã¿ãŒãã§ã€ã¹ã«ãããã³ãŒãã®èªå·±ããã¥ã¡ã³ãæ§ãåäžãããã€ãã£ãèšèªãå Žæã«é¢ä¿ãªããéçºè ã®å¯èªæ§ãåäžããŸãã
çµè«
TypeScriptã§ã®ã¿ã€ãã»ãŒããªé¢æ°åæã«ãããéçºè ã¯ããã¯ãªãŒã³ã§ãä¿å®ãããããåå©çšå¯èœãªã³ãŒããäœæã§ããŸãã颿°åããã°ã©ãã³ã°ã®ååãæ¡çšããTypeScriptã®éçåä»ããæŽ»çšããããšã§ããã¹ãããããã°ãããã³ã¹ã±ãŒãªã³ã°ã容æãªå ç¢ãªã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãããã®ã¢ãããŒãã¯ãæç¢ºãªã³ãã¥ãã±ãŒã·ã§ã³ãšã³ã©ãã¬ãŒã·ã§ã³ãå¿ èŠãšããã°ããŒãã«ãããžã§ã¯ããå«ããææ°ã®ãœãããŠã§ã¢éçºã«ç¹ã«äŸ¡å€ããããŸããããŒã¿å€æãã€ãã©ã€ã³ããUIã³ã³ããŒãã³ãã®åæãWebã¢ããªã±ãŒã·ã§ã³ããã«ãŠã§ã¢ãŸã§ã颿°åæã¯ãœãããŠã§ã¢ãæ§ç¯ããããã®åŒ·åãªãã©ãã€ã ãæäŸããŸãããããã®æŠå¿µãå®è£ ããŠãã³ãŒãã®å質ãå¯èªæ§ãããã³å šäœçãªçç£æ§ãåäžãããããšãæ€èšããŠãã ããããœãããŠã§ã¢éçºã®ç¶æ³ãé²åãç¶ããã«ã€ããŠããããã®ææ°ã®ã¢ãããŒããæ¡çšããããšã§ãã°ããŒãã«ã¢ãªãŒãã§ã®æåã«åããŠããªããšããªãã®ããŒã ãæºåã§ããŸãã