改为TS组件

type组件的JS代码

  1. export default {
  2. name: 'Types',
  3. props:['xxx'],
  4. data(){
  5. return {
  6. type: '-' // - 表示支出 + 表示收入
  7. }
  8. },
  9. mounted() {
  10. console.log(this.xxx)
  11. },
  12. methods:{
  13. selectType(type){
  14. if(type !== '-' && type !== '+'){
  15. throw new Error(`${type} is unknown`)
  16. }
  17. this.type = type
  18. }
  19. }
  20. }

改写为TS

  1. <script lang="ts">
  2. import Vue from 'vue'
  3. import {Component} from 'vue-property-decorator';
  4. @Component
  5. export default class Types extends Vue {
  6. // data
  7. type = '-' // - 表示支出 + 表示收入
  8. // method
  9. selectType(type: string) {
  10. if (type !== '-' && type !== '+') {
  11. throw new Error('type is unknown')
  12. }
  13. this.type = type
  14. }
  15. }
  16. </script>

必须引入Component, 官方文档 https://github.com/kaorun343/vue-property-decorator

@Prop

使用Vue Class Component的prop

官方文档:https://class-component.vuejs.org/guide/props-definition.html

  1. import Vue from 'vue';
  2. import {Component} from 'vue-property-decorator';
  3. const GreetingProps = Vue.extend({
  4. props: {
  5. name: String
  6. }
  7. })
  8. @Component
  9. export default class Types extends GreetingProps {
  10. type = '-'; // - 表示支出 + 表示收入
  11. selectType(type: string) {
  12. if (type !== '-' && type !== '+') {
  13. throw new Error('type is unknown');
  14. }
  15. this.type = type;
  16. }
  17. mounted(){
  18. console.log(this.name);
  19. }
  20. }

使用Vue Property Decorator的prop

文档:https://github.com/kaorun343/vue-property-decorator#Prop

  1. import Vue from 'vue';
  2. import {Component, Prop} from 'vue-property-decorator';
  3. @Component
  4. export default class Types extends Vue {
  5. @Prop(Number) readonly xxx: number | undefined
  6. // @Prop告诉Vue xxx不是data是prop
  7. // Number 告诉 Vue xxx的类型,运行时检查
  8. // number | undefined告诉 TS xxx的类型, 编译时检查
  9. type = '-'; // - 表示支出 + 表示收入
  10. selectType(type: string) {
  11. if (type !== '-' && type !== '+') {
  12. throw new Error('type is unknown');
  13. }
  14. this.type = type;
  15. }
  16. mounted(){
  17. // 当类型有undefined需要判断
  18. if (this.xxx !== undefined) {
  19. console.log(this.xxx.toString());
  20. }
  21. }
  22. }

tips: 获取TS最新版本号

  1. npm info typescript version

Vue单文件组件的三种写法

  1. 用JS对象

    1. export default {data, props, methods, created, ...}
  2. 用TS类 (推荐)

    1. <script lang="ts">
    2. @Component
    3. export default class xxx extends Vue {
    4. xxx: string = 'hi';
    5. @Prop(Number) xxx: number | undefined;
    6. }
  3. 用JS类

    1. @Component
    2. export default class xxx extends Vue {
    3. xxx = 'hi';
    4. }

    修改Vue默认模板

    image.png