ܕνΣοΫͱਪ w ؔTVNͷΓOVNCFSͰ͋Δ͜ͱΛਪ͢Δ function sum(a: number, b: number) { return a + b; } console.log(sum(1, sum(1, 1))); // OK // Argument of type '"a"' is not assignable to // parameter of type 'number' console.log(sum('a', 'b'));
ϥΠϒϥϦͷܕఆٛ w ༗໊ͳϥΠϒϥϦOQNJ!UZQFTϥΠϒϥϦ ໊Ͱܕఆ͕ٛެ։͞Ε͍ͯΔ w ࠷ۙEUT ܕఆٛϑΝΠϧ Λಉࠝͨ͠ύοέʔ δ૿͖͍͑ͯͯΔ npm i @types/node import path from "path"; export function hoge() { const x = path.join("src", "main.ts"); }
w *NQSPWFNBQQFEUZQFNPEJpFST w $POEJUJPOBMUZQFT w 5ZQFJOGFSFODFJODPOEJUJPOBMUZQFT w 6OLOPXOUZQF w 5VQMFTJOSFTUQBSBNFUFSTBOETQSFBEFYQSFTTJPOT w .BQQFEUVQMFUZQFT w 4USJDUCJOE
DBMM
BOEBQQMZNFUIPETJOGVODUJPOT w )JHIFSPSEFSGVODUJPOUZQFJOGFSFODF w *NQSPWFETVQQPSUGPSSFBEPOMZBSSBZTBOEUVQMFT w $POTUDPOUFYUTGPSMJUFSBMFYQSFTTJPOT w "TTFSUJPOJODPOUSPMqPXBOBMZTJT w &UD
"The goal of TypeScript's type system is to statically model patterns in JavaScript in a reasonable way while catching bugs and enforcing correctness" ্ظ5ZQF4DSJQUϩʔυϚοϓ IUUQTHJUIVCDPN.JDSPTPGU5ZQF4DSJQUJTTVFT ΑΓൈਮ
5ZQFJOGFSFODFJODPOEJUJPOBMUZQFT w WYͰ$POEJUJPOBM5ZQFTͱಉ࣌ʹϦϦʔε ͞Εͨػೳ w $POEJUJPOBM5ZQFTͷ݅෦ʹͯϚονϯ ά࣌ʹਪ͞ΕͨܕΛ࠶ར༻Ͱ͖ΔΑ͏ʹ T extends MyCondition ? SomeType : Y;
*OGFSBOE$BQUVSF w 5͕ؔͰ͋ΕɺͦͷΓͱͯ͠ਪ͞ ΕΔܕ͕3ʹ֨ೲ͞ΕΔ type Return = T extends (...args: any[]) => infer R ? R : never; let r: Return number>; // typeof r = number
(FOFSJDSFTUQBSBNFUFST w 3FTU1BSBNFUFSTʹ૯শܕ͕ར༻Մೳʹ w WYʹ͓͚ΔՄมҾܕਪڧԽͷҰ w declare function curry( fn: (x: T, ...args: U) => R ): (x: T) => (...args: U) => R; const sum = (a: number, b: number) => a + b; const bound = curry(sum)(1); const x = bound(2); // type of x = number const error = bound("hoge"); // error
0UIFSSFTPVSDFT w )5.-$POGFSFODF w IUUQTZPVUVCF/19:U8CWRL MJTU1-F';8[-+Q;DDVPQE#K+"[email protected]:( W7$*)W w IUUQTTQFBLFSEFDLDPNRVSBNZ UZQFTDSJQUFWPMVUJPOOHPOBJS