# λ·°μ νμ μ€ν¬λ¦½νΈ μ μ©νκΈ°
λ·° μ»΄ν¬λνΈμ νμ μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±νκΈ° μν΄ νμν μ§μμ μμλ΄ λλ€.
# νλ‘μ νΈ μμ±
λ·° μ΅μ CLI λꡬ(3.4 μ΄μ)λ₯Ό μ¬μ©νλ©΄ TypeScriptκ° μ μ©λ νλ‘μ νΈλ₯Ό λ°λ‘ ꡬμ±ν μ μμ΅λλ€. νλ‘μ νΈ μμ±μ μν΄ μλ λͺ λ Ήμ΄λ₯Ό μ λ ₯ν©λλ€.
vue create vue-ts
κ·Έλ¦¬κ³ νλ‘μ νΈ μμ± μ΅μ μ μλμ κ°μ΄ μ νν©λλ€.
TIP
CLI 2.x λ²μ λꡬλ₯Ό μ΄μ©νμ¬ νμ μ€ν¬λ¦½νΈλ₯Ό ꡬμ±νλ λ°©λ²μ λν΄μλ μ¬κΈ° (opens new window)λ₯Ό μ°Έκ³ νμΈμ.
# Vue.extend()λ₯Ό νμ©ν νμ μ€ν¬λ¦½νΈ λ·° μ»΄ν¬λνΈ
μμ±ν νλ‘μ νΈμ App.vue
νμΌμ μλμ κ°μ΄ λ°κΏλλ€.
<template>
<div>
{{ result }}
</div>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
data() {
return {
result: '',
}
},
methods: {
sayHi(someone: string) {
this.result = 'hello ' + someone;
}
},
created() {
this.sayHi(10);
},
})
</script>
κΈ°μ‘΄ λ·° μ»΄ν¬λνΈμ λ¬λΌμ§ μ μ <script lang="ts">
λΆλΆμ
λλ€. μΉν©μΌλ‘ λΉλν λ vue-loaderκ° νμ
μ€ν¬λ¦½νΈ μ½λλ₯Ό μ΄ν΄νκ³ ν΄μνκΈ° μν΄μλ μ΄ μμ±μ μΆκ°ν΄μΌν©λλ€. κ·Έλ¦¬κ³ Vue.extend()
λ₯Ό μ μΈν΄μ€μΌ νμ
μ€ν¬λ¦½νΈ μ½λκ° λ·°μ μμ±λ€κ³Ό ν¨κ» μ μμ μΌλ‘ λμλ©λλ€.
λ§μ§λ§μΌλ‘ npm run serve
λͺ
λ Ήμ΄λ₯Ό μ΄μ©νμ¬ μ΄ μ½λλ₯Ό μ€νν΄λ³΄λ©΄ λͺ
λ Ήμ΄ μ€ν μ°½μμ μλμ κ°μ μλ¬λ₯Ό νμΈν μ μμ΅λλ€.
λ©μλ ν¨μμΈ sayHi()
μ μΈμμλ λ¬Έμμ΄λ§ λ€μ΄μ¬ μ μλλ° μ«μ 10
μ λ겨쀬기 λλ¬Έμ μλ¬κ° λ°μν©λλ€.
# Decorator(@)λ₯Ό νμ©ν νμ μ€ν¬λ¦½νΈ λ·° μ»΄ν¬λνΈ
μμμ μ΄ν΄λ³Έ λ°©λ² μ΄μΈμλ λ°μ½λ μ΄ν°(Decorator, @ (opens new window))λ₯Ό μ΄μ©ν΄ λ·°μ νμ μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
μ΄ λ°©λ²μ κΈ°μ‘΄μ κ°μ²΄ μ€νμΌ μμ± λ°©μμ΄ μλ ν΄λμ€ κΈ°λ° μμ± λ°©μμ μ¬μ©ν΄μΌνλ―λ‘ ES6μ Class (opens new window) λ¬Έλ²μ΄ μ΅μνμ§ μμ λΆλ€μκ²λ λ€μ μ΄λ €μΈ μ μμ΅λλ€. ES6μ Classμ μ°Έκ³ νμ μ νμ΅νμΈμ.
λ°μ½λ μ΄ν°λ₯Ό νμ©νκΈ° μν΄ App.vue
νμΌμ λ΄μ©μ μλμ κ°μ΄ λ³νν©λλ€.
<template>
<div>
<h1>TypeScript with Vue</h1>
<button @click="sayHi">say hi</button>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import Component from 'vue-class-component';
// λ°μ½λ μ΄ν°λ₯Ό μ΄μ©ν μ»΄ν¬λνΈ μ μ
@Component
export default class App extends Vue {
// data μμ±
message = 'hello';
// methods μμ±
sayHi() {
console.log(this.message);
}
}
</script>
@Component
λΌλ λ°μ½λ μ΄ν°λ₯Ό νμ©νκΈ° μν΄ vue-class-component λΌμ΄λΈλ¬λ¦¬λ₯Ό μν¬νΈνμμ΅λλ€. μμμ μ΄ν΄λ΄€λ Vue.extend()
λ°©μκ³Όλ λ€λ₯΄κ² Vue
λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΄λμ€μ μμνμ¬ ν΄λμ€ λ©€λ² λ³μμ ν΄λμ€ ν¨μ ννλ‘ μ μνλ κ²μ λ³Ό μ μμ΅λλ€.
data μμ±μΈ message
λ ν΄λμ€μ λ©€λ² λ³μ ννλ‘ μμ±νκ³ , methods μμ±μΈ sayHi()
λ ν΄λμ€ λ©μλ ν¨μ ννλ‘ μμ±νμμ΅λλ€.
TIP
λ°μ½λ μ΄ν°λ ν΄λμ€ μ μμ λ΄μ©μ λν΄ λ©ν μ 보λ₯Ό μ 곡νκΈ° μν λ¬Έλ²μ
λλ€. μ΄λ
Έν
μ΄μ
(@)μ μ¬μ©νλ©° @ννμ
ννλ‘ μμ±ν©λλ€. λ μμΈν λ΄μ©μ νμ
μ€ν¬λ¦½νΈ 곡μ λ¬Έμ (opens new window)λ₯Ό μ°Έκ³ νμΈμ.
# μ¨λΌμΈ κ°μ μλ΄
Vue.jsμ νμ μ€ν¬λ¦½νΈλ₯Ό μ¬λ°κ² λ°°μλ³Ό μ μλ μ¨λΌμΈ κ°μλ₯Ό μκ°ν©λλ€ π