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
  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/hunanzp/p/10144358.html
Copyright © 2011-2022 走看看