Typescript with Vue ์‹ค์ „ ํ”„๋กœ์ ํŠธ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํ•œ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œ ๋œ Vue ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ๊ฐ•์ขŒ์ž…๋‹ˆ๋‹ค. Vue.js ๊ธฐ์ดˆ ๊ฐ•์ขŒ์™€ ES6 ๋˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ž…๋ฌธ์ž์ด์‹  ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค๊ป˜ ์ด ๊ฐ•์ขŒ๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

(4.4) ์ˆ˜๊ฐ•ํ‰ 34๊ฐœ

์ˆ˜๊ฐ•์ƒ 558๋ช…

๋‚œ์ด๋„ ์ค‘๊ธ‰์ด์ƒ

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

4.4

5.0

Dong Jun Kwon

57% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

์š”์ฆ˜ ํ•ซํ•œ vue์™€ typescript์— ๋Œ€ํ•œ ๊ฐ•์˜๊ฐ€ ์—†๋Š”๋ฐ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

5.0

์œ ํ•œ๊ตฐ

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ Vue๋ฅผ ๊ธฐ์ดˆ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋งค์šฐ ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

5.0

frontzero

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

Vue ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ, TypeScript ๊ธฐ๋ฐ˜์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š”์ง€ ๋ง›์„๋ณด๊ณ ์‹ถ์—ˆ๋Š”๋ฐ, ์ข‹์€ ๊ฐ•์˜๊ฐ€ ์žˆ์–ด์„œ ์ž˜ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. vue 3.0 ์ด ๋นจ๋ฆฌ ๋‚˜์™€์„œ ์ €๋„ TS๊ธฐ๋ฐ˜(์ข€ ๋” TS ์นœํ™”์ ์ธ?)์— SPA ๊ฐœ๋ฐœ์„ ํ•˜๊ณ ์‹ถ๋„ค์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ TODO ์˜ˆ์ œ๋Š” ๋ผ์šฐํŠธ์—๋‹ค watch ๋ฅผ ๋‹ฌ์•„์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋„ค์š”.. ์ข‹์€ ๋ฐฉ์‹์€ ์•„๋‹ˆ์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ์›ํ•˜๋Š”๋Œ€๋กœ ๋™์ž‘ํ•˜๋‹ˆ.. ๋‚˜์ค‘์— ์‹œ๊ฐ„๋‚˜๋ฉด ์ข€ ๋” ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด๋˜๊ฐ€ ์ด๋Œ€๋กœ ๋‘๋Š”๊ฑธ๋กœ! ใ… ใ… ใ…‹ใ…‹ @Watch('$route') public watchRouteParam(after: any, before: any) { if (after.params.hasOwnProperty('path')) { switch (after.params.path) { case 'list-active' : this.todoData = this.$store.getters.todoActiveItem; break; case 'list-clear' : this.todoData = this.$store.getters.todoClearItem; break; } } else { this.todoData = this.$store.getters.todoItem; } }

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • Vue.js์™€ Typescript๋ฅผ ์ด์šฉํ•ด์„œ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ํ•œ๋‹จ๊ณ„ ์—…๊ทธ๋ ˆ์ด๋“œ ๋œ Vue ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ฃผ๋Š” ๊ฐ•์ขŒ์ž…๋‹ˆ๋‹ค.
Vue.js ๊ธฐ์ดˆ ๊ฐ•์ขŒ์™€ ES6 ๋˜๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ž…๋ฌธ์ž์ด์‹  ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค๊ป˜ ์ด ๊ฐ•์ขŒ๋ฅผ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ตœ๊ทผ, ๊ตฌ๊ธ€์˜ Angular์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ณต์‹ ์–ธ์–ด๋กœ ์ง€์ •ํ•  ๋งŒํผ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์œ„์ƒ์ด ๋†’์•„์ ธ๊ฐ€์ง€๋งŒ,
์•„์ง๋„ ๋Ÿฌ๋‹์ปค๋ธŒ๋•Œ๋ฌธ์— ๋„์ž…์„ ๊บผ๋ คํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์ขŒ๋Š” ์™œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„ ํƒํ•ด์•ผํ•˜๋Š”์ง€, ๊ณผ์—ฐ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋„์ž…ํ•˜๋Š”๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€์— ๋Œ€ํ•œ ์„ ํƒ์„ ๋„์™€๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด ๊ฐ•์ขŒ๋ฅผ ํ†ตํ•ด Vue.js ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์Šคํƒ€์ผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฐ•์ขŒ๋Š” ํฌ๊ฒŒ 4๊ฐ€์ง€์˜ ์ฃผ์ œ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1. Typescript ์„ ํƒ๊ฐ€์ด๋“œ
2. Class-based ์ปดํฌ๋„ŒํŠธ ๋งŒ๋“ค๊ธฐ
3. Typescript๋ฅผ ์ด์šฉํ•ด Vuex ์„ค๊ณ„ํ•˜๊ธฐ
4. ์‹ค์ „ํ”„๋กœ์ ํŠธ (Todo-list)

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • Vue.js ์— ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž

  • Vue.js ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์žฅ๊ธฐ๊ฐ„ ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ์‹ค๋ฌด์ž

  • Vue.js ๋กœ ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์„ ํ•˜๊ณ ์žํ•˜๋Š” ์‹ค๋ฌด์ž

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • ES6์˜ ๋ฌธ๋ฒ•์„ ์•Œ๊ณ ์žˆ๊ฑฐ๋‚˜ typescript ์ดˆ๊ธ‰

  • Vue.js ์ดˆ๊ธ‰

์•ˆ๋…•ํ•˜์„ธ์š”
์„ฑ๋„ํฌ์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฑ์—”๋“œ๋„ ๊ฐœ๋ฐœํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ๐Ÿ˜Ž
๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋œ ์งˆ๋ฌธ์€ ์–ธ์ œ๋‚˜ ํ™˜์˜ํ•˜์˜ค๋‹ˆ ํŽธํ•˜๊ฒŒ ์ด๋ฉ”์ผ๋กœ ์—ฐ๋ฝ์ฃผ์„ธ์š”!

๐Ÿ“Œblog : https://seongdohee.github.io/
๐Ÿ“Œemail : seong0420hei@gmail.com

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

21๊ฐœ โˆ™ (3์‹œ๊ฐ„ 41๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

34๊ฐœ

4.4

34๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • ์œ ํ•œ๊ตฐ๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    ์œ ํ•œ๊ตฐ

    ์ˆ˜๊ฐ•ํ‰ 1

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ Vue๋ฅผ ๊ธฐ์ดˆ๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๋งค์šฐ ํฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

    • Dong Jun Kwon๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      Dong Jun Kwon

      ์ˆ˜๊ฐ•ํ‰ 1

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      57% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ์š”์ฆ˜ ํ•ซํ•œ vue์™€ typescript์— ๋Œ€ํ•œ ๊ฐ•์˜๊ฐ€ ์—†๋Š”๋ฐ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

      • frontzero๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
        frontzero

        ์ˆ˜๊ฐ•ํ‰ 5

        โˆ™

        ํ‰๊ท  ํ‰์  4.6

        5

        100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

        Vue ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ, TypeScript ๊ธฐ๋ฐ˜์œผ๋กœ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•˜๋Š”์ง€ ๋ง›์„๋ณด๊ณ ์‹ถ์—ˆ๋Š”๋ฐ, ์ข‹์€ ๊ฐ•์˜๊ฐ€ ์žˆ์–ด์„œ ์ž˜ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. vue 3.0 ์ด ๋นจ๋ฆฌ ๋‚˜์™€์„œ ์ €๋„ TS๊ธฐ๋ฐ˜(์ข€ ๋” TS ์นœํ™”์ ์ธ?)์— SPA ๊ฐœ๋ฐœ์„ ํ•˜๊ณ ์‹ถ๋„ค์š”! ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ TODO ์˜ˆ์ œ๋Š” ๋ผ์šฐํŠธ์—๋‹ค watch ๋ฅผ ๋‹ฌ์•„์„œ ์ฒ˜๋ฆฌ๋ฅผ ํ–ˆ๋„ค์š”.. ์ข‹์€ ๋ฐฉ์‹์€ ์•„๋‹ˆ์ง€๋งŒ.. ๊ทธ๋ž˜๋„ ์›ํ•˜๋Š”๋Œ€๋กœ ๋™์ž‘ํ•˜๋‹ˆ.. ๋‚˜์ค‘์— ์‹œ๊ฐ„๋‚˜๋ฉด ์ข€ ๋” ๋ฆฌํŒฉํ† ๋ง ํ•ด๋ณด๋˜๊ฐ€ ์ด๋Œ€๋กœ ๋‘๋Š”๊ฑธ๋กœ! ใ… ใ… ใ…‹ใ…‹ @Watch('$route') public watchRouteParam(after: any, before: any) { if (after.params.hasOwnProperty('path')) { switch (after.params.path) { case 'list-active' : this.todoData = this.$store.getters.todoActiveItem; break; case 'list-clear' : this.todoData = this.$store.getters.todoClearItem; break; } } else { this.todoData = this.$store.getters.todoItem; } }

        • ๋ฐฑ์ฐฝ๋ช…๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
          ๋ฐฑ์ฐฝ๋ช…

          ์ˆ˜๊ฐ•ํ‰ 1

          โˆ™

          ํ‰๊ท  ํ‰์  5.0

          5

          90% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

          ๊ทผ๋ž˜ ๋ดค๋˜ Vue.js ๊ฐ•์˜ ์ค‘ ๊ฐ€์žฅ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

          • ํ•œ์žฌํ˜•๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
            ํ•œ์žฌํ˜•

            ์ˆ˜๊ฐ•ํ‰ 2

            โˆ™

            ํ‰๊ท  ํ‰์  3.0

            4

            5% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

            ๋‹ค ์ข‹์€๋ฐ ๋ชฉ์†Œ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„์„œ ๋ณผ๋ฅจ์„ ์ตœ๋Œ€๋กœ ํ•ด๋„ ์ž˜ ์•ˆ๋“ค๋ ค์š” ใ… ใ…  ๊ฐ•์˜๋Š” ์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค

            ๋น„์Šทํ•œ ๊ฐ•์˜

            ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

            ๋น„๊ณต๊ฐœ ๊ฐ•์˜๋กœ
            ์ˆ˜๊ฐ•์ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.