zoukankan      html  css  js  c++  java
  • 详解TypScript数据类型转换

    最近在用TypeScript(后面简称TS),发现TS虽然语法和C#差不多但是在很多地方还是不够高级(和C#相比),这里主要聚焦在数据类型强转上面,直接看下面案例吧

    string转number 

    案例如下

        let i: number = 0;
        console.log(typeof i);
        let k: string = '123';
        console.log(typeof k);
        i = +k;
        console.log(typeof i,typeof k);
        console.log(i);
    

    上面代码执行结果是 
    number 
    string 
    number string 
    123 

    ** 自定义类型如何强转? **

    查了下TypeScript里数据类型强转是通过以下方式:

            let yy: any = '111';
            console.log('yy数据类型为:', typeof (yy));
            let kk: number = <number>yy;
            console.log('yy数据类型为:', typeof (yy), 'kk数据类型为:', typeof(kk));
    
    

    代码结果是:"yy数据类型为: string" 
    “yy数据类型为: string kk数据类型为: string”

    需要说明的是代码中变量yy必须申明为any类型,否则编译器会提示语法错误。由此我得知的结论是TS的强转前提是需强转的对象数据类型必须为any。 那么TS的强制转换只有这一个前提么? 继续看下面代码:

            console.log('begindate格式化前的类型',
                typeof ($(this.BeginDateDatePicker.nativeElement).data('DateTimePicker').date()));
    
            console.log('begindate格式化后的类型:',
                typeof ($(this.BeginDateDatePicker.nativeElement).data('DateTimePicker').date().format('L')));
    
            let y = <moment.Moment>($(this.BeginDateDatePicker.nativeElement).data('DateTimePicker').date().format('L'));
            console.log('begindate式化后后再转换后的类型:',
                typeof (y));
    

    上面代码中用到了页面中的日期input的值,也引用了Moment插件(官网:http://momentjs.cn/)。

    代码需求是要将input的日期格式化为"yyyy-MM-dd"格式。上面的代码可以编译通过,虽然需转换类型的日期值对象当前数据类型为string(不为any),但是编译器还是通过了。我们来看最终执行结果:

    结果如下: 
    begindate格式化前的类型 object 
    begindate格式化后的类型: string 
    begindate式化后后再转换后的类型: string 

    结论

    上面代码的执行结果可知,TS内置数据类型强转方式是建立在TS内置的数据类型基础上 我们自定义数据类型或是第三方插件的数据类型如需强转需要自己实现。 同时,对内置数据类型强转也需遵循TS自身的语法要求。

    最后还是通过momentjs官网的强转方式将string对象转换成了moment.Moment类型对象。最终代码如下:

            createOrEditInput.luckDrawActivitySetting.beginDate =
                moment($(this.BeginDateDatePicker.nativeElement)
                    .data('DateTimePicker').date().format('L'));
                    
            createOrEditInput.luckDrawActivitySetting.endDate =
                moment($(this.EndDateDatePicker.nativeElement)
                    .data('Da
  • 相关阅读:
    有感:假设在透明的竞争条件下的中国软件企业
    庆祝一下:www.pinstudy.com在GOOGLE 上的PR值为:3
    性能最大化ΔΣ 转换器
    静态时序分析(STA,Static Timing Analysis)基础与应用3
    云计算 Cloud Computing 简介
    CORDIC算法
    Computer Science 计算机科学与技术系 重要国际学术会议
    云上的安全 Cloud Technology
    Electronic Engineering 电子工程系 信息与通信工程一级学科 重要国际学术会议汇总
    Microelectronic 微纳电子学系 重要国际学术会议
  • 原文地址:https://www.cnblogs.com/hunanzp/p/10144358.html
Copyright © 2011-2022 走看看