Upgrade to Pro — share decks privately, control downloads, hide ads and more …

こんなTypeScriptはいやだ! / I hate this kind of TypeSc...

こんなTypeScriptはいやだ! / I hate this kind of TypeScript!

登壇者名:佐藤 拓人
登壇したイベント:TSKaigi 2024(https://tskaigi.org
登壇したイベントタイトル:こんなTypeScriptはいやだ!

登壇したイベントの登壇者URL:https://tskaigi.org/talks/takuuuuuuu777

More Decks by 株式会社ビットキー / Bitkey Inc.

Other Decks in Technology

Transcript

  1. Copyright © 2023 Bitkey Inc. All right reserved. 2 ࣗݾ঺հ

    ࠤ౻ ୓ਓ Sato Takuto 2015.04 2019.05 2020.01 େֶ(ݐஙֶઐ߈)ଔۀޙɺ גࣜձࣾϫʔΫεΞϓϦέʔγϣϯζʹೖࣾ ձܭγεςϜͷιϑτ΢ΣΞ։ൃΛ୲౰ ಛʹࡒ຿ձܭͷ࢓༁ؔ࿈ ϏοτΩʔ΁ࢀը ECαΠτͷ։ൃ / อकɺࣾ಺γεςϜͷ։ൃ TaKuTyͷ։ൃ ࠓͷHomeࣄۀͷલ਎ͱͳΔResidenceνʔϜʹ഑ଐ bitlockΛѻ͏؅ཧը໘΍όοΫΤϯυɺappͷ։ൃʹै ࣄ Now HomeϓϩμΫτͷٕज़੹೚ऀ ෳࡶͳࣄ৅ΛಡΈղ͍ͯߏ଄Խ͠ɺந৅Խ / ൚༻ԽͰ ͖ΔΑ͏ʹઃܭ͠ɺ௿ίετͰଟ͘ͷՁ஋ΛͩͤΔ։ ൃΛ͢Δ͜ͱΛ޷Ή
  2. Copyright © 2023 Bitkey Inc. All right reserved. 3 ࣗݾ঺հ

    ςΫϊϩδʔͷྗͰ͋ΒΏΔ΋ͷΛ ҆શͰ ศརͰ ؾ࣋ͪΑ͘ʮͭͳ͛Δʯ εϚʔτϩοΫͳͲΛ༻͍ͯ ϦΞϧͱσδλϧͷ෼அΛղফ
  3. Copyright © 2023 Bitkey Inc. All right reserved. 5 1.

    ͸͡Ίʹ (޷͖Ͱ΋ɺݏ͍Ͱ΋...) TypeScriptͰ͜Μͳ࣮૷͸ݏͩͳ ͬͯࢥͬͨ͜ͱ͕͋Δํ͸ ଟ͍ͷͰ͸ͳ͍Ͱ͠ΐ͏͔ʁ
  4. Copyright © 2023 Bitkey Inc. All right reserved. 6 ࣮ࡍʹݱ৔Ͱײͨ͡

    ͜ΜͳTypeScript͸ݏͩࣄྫ ͜ΕΛ๷͙ରԠࡦ 1. ͸͡Ίʹ
  5. Copyright © 2023 Bitkey Inc. All right reserved. 14 Bad

    Point ɾίʔυ͕આ໌੹೚Λ์غ͍ͯ͠Δ ɾνʔϜ։ൃ͢Δؾͳ͠...ͱࢥΘΕ͏Δ ɾAIͷαϙʔτ΋ड͚ͮΒ͘ͳΔ 1. ੈք͕ ”any” ͰᷓΕ͍ͯΔ
  6. Copyright © 2023 Bitkey Inc. All right reserved. 15 How

    to Improvement 1. ੈք͕ ”any” ͰᷓΕ͍ͯΔ ɾnoImplicitAny:true (tsconfig.json) ɾίʔυ͕આ໌੹೚ΛՌ͔ͨ͢ؾֻ͔͚Δ (1೥ޙͷࣗ෼͕ཧղ/อकՄೳ͔) ɾϞϒϓϩ / ϖΞϓϩ Λੵۃ࣮ࢪ
  7. Copyright © 2023 Bitkey Inc. All right reserved. 16 TypeScriptΛ࢖ͬͯ

    ʮΘ͔Δʯঢ়ଶʹ͠Α͏ʂ 1. ੈք͕ ”any” ͰᷓΕ͍ͯΔ
  8. Copyright © 2023 Bitkey Inc. All right reserved. 17 2.

    ֎ք͔Β͘Δʮ஋ʯ͕ʮܕʯͱဃ཭͍ͯ͠Δ
  9. Copyright © 2023 Bitkey Inc. All right reserved. 18 2.

    ֎ք͔Β͘Δʮ஋ʯ͕ʮܕʯͱဃ཭͍ͯ͠Δ ɾAPIͷݺͼग़͢ॲཧɺAPIͷఆٛɺDBͷࢀরͳͲ...
  10. Copyright © 2023 Bitkey Inc. All right reserved. 19 2.

    ֎ք͔Β͘Δʮ஋ʯ͕ʮܕʯͱဃ཭͍ͯ͠Δ ɾAPIͷݺͼग़͢ॲཧɺAPIͷఆٛɺDBͷࢀরͳͲ... ඞਢ߲໨ʁ ଞͷ߲໨͸ͳ͍ʁ ඞͣStringܕʁ
  11. Copyright © 2023 Bitkey Inc. All right reserved. 20 ܕΛ৴͡ΒΕͳ͚Ε͹

    ͳʹΛ৴͡Ε͹ྑ͍ʂʁ 2. ֎ք͔Β͘Δʮ஋ʯ͕ʮܕʯͱဃ཭͍ͯ͠Δ
  12. Copyright © 2023 Bitkey Inc. All right reserved. 21 Bad

    Point ɾී௨ʹ࣮૷͍ͯͨ͠ΒόάΔ ɾٙ৺҉َʹͳΔ ɾ͍Ζ͍Ζؾʹͩͯ͠͠มߋͰ͖ͳ͘ͳΔ 2. ֎ք͔Β͘Δʮ஋ʯ͕ʮܕʯͱဃ཭͍ͯ͠Δ
  13. Copyright © 2023 Bitkey Inc. All right reserved. 22 ɾ֎քͱͷڥքͰνΣοΫ͢Δ

    ɾఆ͔ٛΒࣗಈੜ੒͢ΔπʔϧΛར༻͢Δ (PrismaͳͲ) How to Improvement 2. ֎ք͔Β͘Δʮ஋ʯ͕ʮܕʯͱဃ཭͍ͯ͠Δ
  14. Copyright © 2023 Bitkey Inc. All right reserved. 26 3.

    ഑ྻͷཁૉͷundefinedߟྀ undefined͕ߟྀ͞ Εͳ͍
  15. Copyright © 2023 Bitkey Inc. All right reserved. 28 Bad

    Point ɾTypeScriptʹ਎Λ೚ͤΔ͜ͱ͕Ͱ͖ͳ͍ ɾৗʹέΞ͠ଓ͚ͳ͚Ε͹ͳΒͳ͍ 4. ഑ྻͷཁૉͷundefinedߟྀ
  16. Copyright © 2023 Bitkey Inc. All right reserved. 29 ɾnoUncheckedIndexedAccess:true

    (tsconfig.json) How to Improvement 4. ഑ྻͷཁૉͷundefinedߟྀ
  17. Copyright © 2023 Bitkey Inc. All right reserved. 32 4.

    ྻڍܕͷ௥Ճʹ௥ैͰ͖ͳ͍ ɾbefore ɾafter
  18. Copyright © 2023 Bitkey Inc. All right reserved. 34 Bad

    Point ɾमਖ਼͕ඞཁͳՕॴΛػցతʹચ͍ग़͢͜ͱ͕ Ͱ͖ͳ͍ 4. ྻڍܕͷ௥Ճʹ௥ैͰ͖ͳ͍
  19. Copyright © 2023 Bitkey Inc. All right reserved. 35 Bad

    Point ɾswitchจͰneverΛར༻͢Δ ɾswitch-exhaustiveness-checkΛར༻ 4. ྻڍܕͷ௥Ճʹ௥ैͰ͖ͳ͍
  20. Copyright © 2023 Bitkey Inc. All right reserved. 36 TypeScriptͱ͏·͘෇͖߹ͬͯ

    อक͠΍͘͢͠Α͏ʂ 4. ྻڍܕͷ௥Ճʹ௥ैͰ͖ͳ͍
  21. Copyright © 2023 Bitkey Inc. All right reserved. 37 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ
  22. Copyright © 2023 Bitkey Inc. All right reserved. 38 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ ΈΜͳେ޷͖ Prisma
  23. Copyright © 2023 Bitkey Inc. All right reserved. 39 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ ΈΜͳେ޷͖ Prisma include۠ͷࢦఆʹج͍ͮͯ औಘ͞ΕΔ஋ʹ΋ ಈతʹܕ͕෇༩͞ΕΔ
  24. Copyright © 2023 Bitkey Inc. All right reserved. 40 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ ΈΜͳେ޷͖ Prisma include۠ͷࢦఆʹج͍ͮͯ औಘ͞ΕΔ஋ʹ΋ ಈతʹܕ͕෇༩͞ΕΔ ܕͱͯ͠΋࣮ଶͱͯ͠΋ ஋͕औಘ͞ΕΔ ܕͱͯ͠΋࣮ଶͱͯ͠΋ ஋͕औಘ͞Εͳ͍
  25. Copyright © 2023 Bitkey Inc. All right reserved. 41 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ Include۟Λ੾Γग़͠
  26. Copyright © 2023 Bitkey Inc. All right reserved. 42 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ Include۟Λ੾Γग़͠ trueͰ͸ͳ͘booleanѻ͍ͱͳΔ
  27. Copyright © 2023 Bitkey Inc. All right reserved. 43 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ Include۟Λ੾Γग़͠ trueͰ͸ͳ͘booleanѻ͍ͱͳΔ include͕۟booleanѻ͍ͷͨΊ औಘ͞ΕΔ͔ະ֬ఆͷѻ͍ͱͳΔ
  28. Copyright © 2023 Bitkey Inc. All right reserved. 44 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ as const Λར༻
  29. Copyright © 2023 Bitkey Inc. All right reserved. 45 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ as const Λར༻ as const ͷΈͩͱ true͸ҡ࣋͞ΕΔ͕ த਎ʹޡΓ͕͋ͬͯ΋͜͜Ͱ͸ؾ෇͚ͳ͍...
  30. Copyright © 2023 Bitkey Inc. All right reserved. 46 4.

    ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ ར༻͢ΔՕॴͰ औಘͰ͖͍ͯͳ͍͜ͱʹؾͮ͘ as const Λར༻ as const ͷΈͩͱ true͸ҡ࣋͞ΕΔ͕ த਎ʹޡΓ͕͋ͬͯ΋͜͜Ͱ͸ؾ෇͚ͳ͍...
  31. Copyright © 2023 Bitkey Inc. All right reserved. 47 ɾ࣮૷ϛε࣌ʹɺϛεपลͰؾ෇͚ͳ͍

    ɾ໰୊ͷݕ஌͕஗Εɺ໰୊ͷղফ͕൥ࡶʹ Bad Point 4. ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ
  32. Copyright © 2023 Bitkey Inc. All right reserved. 48 ɾsatisfiesΛ༻͍Δ

    How to Improvement 4. ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ
  33. Copyright © 2023 Bitkey Inc. All right reserved. 49 ɾsatisfiesΛ༻͍Δ

    How to Improvement trueѻ͍Ͱܕ͕౉͞ΕΔͷͰ ܕͱͯ͠΋औಘ͞ΕΔલఏͱͳΔ 4. ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ
  34. Copyright © 2023 Bitkey Inc. All right reserved. 50 ɾsatisfiesΛ༻͍Δ

    How to Improvement ࢦఆͷ࢓ํʹޡΓ͕͋Ε͹ଈ࣌ʹؾ͚ͮͯ ิ׬ͷαϙʔτΛड͚ͳ͕Βमਖ਼Ͱ͖Δ trueѻ͍Ͱܕ͕౉͞ΕΔͷͰ ܕͱͯ͠΋औಘ͞ΕΔલఏͱͳΔ 4. ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ
  35. Copyright © 2023 Bitkey Inc. All right reserved. 51 ܕͷ࢓૊ΈΛ্ख͘࢖ͬͯ

    ΑΓ؆୯ʹ࣮૷Ͱ͖Δ޻෉Λʂ 4. ܕͷύλʔϯͱ۩ମతͳ஋ͱͷڱؒ