• 记一次使用微软大佬出品的《typescript》


    TypeScript是什么?

     官网上说TypeScript是JavaScript类型的超集,并且可以编译为纯JavaScript。在任何浏览器,集群(服务器),操作系统上面都可以运行,而且还开源。

    我的认知

    TypeScript 是 JavaScript 的强类型版本。应用于前段时间通过babel等语言转换脚手架转换为适应任何浏览器的JavaScript语言。而且他是 JavaScript 的超集,这意味着他支持所有的 JavaScript 语法,能让前端入门的阶梯会低很多。当然他还会有自己一些增加的新语法 例如class / interface / module,更面向对象,阅读性会更加的棒。

    为什么要使用TypeScript?

    先说说Js的劣势,就是弱类型!在编码的时候,没有明确声明某个属性的类型,写着写着代码就会连自己都不知道究竟最初设想的是什么类型。下面有一个例子说明一下

    var a = 12
    a = '12'
    a = a + 1
    console.log(a)  // 121     我期望a是13,但最终的答案不是我想要的

    这就是弱类型的劣势,a可以被任何类型的值赋值,这样就很容易造成一些莫名其妙的错误。

    那typescript怎么写呢?下面依然是例子

    let a : number = 12
    a = '12'  //当你这样赋值的时候你的编译器已经报错了  TS2322: Type '0' is not assignable to type 'string'.

    ts的语言不允许你原来是number的值赋一个字符串,这样的约束可以让错误在代码编写的时候就可以被发现了!

    开始使用现在项目使用TypeScript

    我们的部分前端项目也正好在使用TypeScript,省去了很多的配置,但我们的vue还是2.0,对TypeScript的支持不够完善,所以我引入了装饰器的写法,让vue更加趋向类,增强可读性。

    我使用的是 vue-property-decorator

    import { Vue, Component, Watch } from 'vue-property-decorator';

    那么来看看用typeScript+vue-property-decorator和原有vue写法的区别吧~ 因为公司内部代码不方便展示,还是手写一个简单例子作为对比吧!

    原来的写法例子

    export default {
        components: {
            myInput
        },
        data () {
          return {
              test: 0
          }
        },
        watch: {
          test: {
              handler(n,o){
                  console.log(n)
              },
              immediate: true,
              deep: true 
          }
        },
        computed: {
          getDate: {
            get: () => {
              return this.test
            },
            set: val => {
              this.test = val
            }
          }
        },,
        methods: {
            handleClick () {
                this.test = 3
            }
        },
        mounted () {
    
        }
    }

    typescript改造的写法

    @Component({
      components: {
        myInput
      }
    })
    export default class Test extends Vue {
      test: number = 0;  //类型声明
    
      //computed 创建日期Computed
      get testComputed() {
        return this.test
      }
    
      set testComputed(val) {
        this.test = val
      }
    
      //watch
      @Watch('test', {deep: true})
      testOnChange(n: number, o: number) {
        console.log(n)
      }
    
      //methods
      handleClick(val: number) {
        this.test = 3
      }
    
      private mounted() {
    
      }
    }
  • 相关阅读:
    struts.xml 配置
    result重定向到一个action
    Action类中通过ServlexxxAware接口的方式来获取来获取web资源
    Action类中通过ServletActionContext来获取web资源
    Action类中通过继承xxxAware接口来获取web资源
    Action类中通过ActionContext来获取web资源
    java中日期格式转换
    java类的执行顺序
    批量删除Redis数据库中的Key
    Python等同于PHP的 strip_tags?
  • 原文地址:https://www.cnblogs.com/dannyxie/p/12786463.html
Copyright © 2020-2023  润新知