allowJs
, noImplicitThis
등 옵션 추가npm run build
가 가능한 수준의 타입 정의 및 수정strict
레벨을 올려가면서 효용성이 높은 곳에 점진적 타입 정의 진행"ts + tab"
단축키를 이용해서 .vue
파일 생성<template> <div>{{ message }}</div> <button @click="changeMessage">변경</button> </template> <script> import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { // data 속성 const message = ref('곧 바뀜'); // 메서드 const changeMessage = () => message.value = '바꼈다' return { message, changeMessage } } }) </script>
<template> <div>{{ message }}</div> <button @click="changeMessage">변경</button> </template> <script> import { defineComponent, ref } from 'vue'; export default defineComponent({ setup() { // data 속성 const message = ref('곧 바뀜'); // 메서드 const changeMessage = () => message.value = '바꼈다' return { message, changeMessage } } }) </script>
옆 팀 Vue.js 개발자
Vue 3를 지원하는 커뮤니티 라이브러리는 없었다…
2021년 9월 15일 기준
2021년 9월 15일 기준
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> export default { data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> export default { data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> export default { data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> export default { data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> export default { data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> export default { data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import MyChild from './MyChild.vue'; export default { components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import MyChild from './MyChild.vue'; export default { components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import { defineComponent } from 'vue'; import MyChild from './MyChild.vue'; export default defineComponent({ components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import { defineComponent } from 'vue'; import MyChild from './MyChild.vue'; export default defineComponent({ components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import MyChild from './MyChild.vue'; export default { components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import MyChild from './MyChild.vue'; export default { components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 2'; } } } </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import { defineComponent } from 'vue'; import MyChild from './MyChild.vue'; export default defineComponent({ components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <MyChild :message="message" @change="changeMessage" /> </div> </template> <script> import { defineComponent } from 'vue'; import MyChild from './MyChild.vue'; export default defineComponent({ components: { MyChild }, data() { return { message: 'hi' } }, methods: { changeMessage() { this.message = 'hi Vue 3'; } } }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 2'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 2'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 2'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 2'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { defineComponent } from 'vue'; export default defineComponent({ setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi Vue 3'; return { message, changeMessage } }, }) </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi composition'; return { message, changeMessage } }, } </script>
<template> <div> <p>{{ message }}</p> <button @click="changeMessage">변경</button> </div> </template> <script> import { ref } from '@vue/composition-api' export default { setup() { const message = ref('hi'); const changeMessage = () => message.value = 'hi composition'; return { message, changeMessage } }, } </script>
composition-plugin-sample.vue 파일 참고
<template> <p>{{ message }}</p> </template> <script lang="ts"> import Vue from 'vue' export default Vue.extend({ data() { return { message: '' } }, methods: { changeMessage() { this.message = 10; // X, Type Error } } }) </script>
<template> <p>{{ message }}</p> </template> <script lang="ts"> import Vue from 'vue' export default Vue.extend({ data() { return { message: '' } }, methods: { changeMessage() { this.message = 10; // X, Type Error } } }) </script>
Vue.extend()
를 이용한 객체 문법 지향noImplicitThis: true
옵션 추가computed
속성 반환 타입은 꼭 정의d.ts
파일에 정의allowJs
, noImplicitThis
등 옵션 추가npm run build
가 가능한 수준의 타입 정의 및 수정strict
레벨을 올려가면서 효용성이 높은 곳에 점진적 타입 정의 진행"ts + tab"
단축키를 이용해서 .vue
파일 생성