zoukankan      html  css  js  c++  java
  • 5.typescript-任意值、类型推论、联合类型、类型断言、字符串字面量类型

    1.任意值any
    可以将任意类型的变量赋值给该类型的变量,没有指定类型的变量默认为any
     
    也可以用来定义不定类型的数组
    2.类型推论
    上面说到没有指定类型的变量默认为any类型的,但是当声明变量时定义了该变量值,则默认变量为该值得类型值,这就是类型推论

    若声明时未定义,则不会
    3.联合类型
    即可以取值为多种类型中的一种
    下面的例子顶你声明了一个联合类型的变量,其类型可以是string和number中的一种,不可以为其他类型,其间用“|”隔开

    4.类型别名

    直接给栗子:

    原形:

     1 function student(name : string | string[]):string{
     2   if(typeof name === "string"){
     3     return "Mr."+name;
     4   }else{
     5     return name.join("");
     6   } 
     7 }
     8 
     9 console.log(student("wei"));    // Mr.wei
    10 console.log(student(["wei","ze","yang"]));   // weizeyang

    给了类型别名以后:

     1 type nameStr = string;
     2 type nameArr = string[];
     3 type nameType = nameStr | nameArr;
     4 
     5 function student(name : nameType):nameStr{
     6   if(typeof name === "string"){
     7     return "Mr."+name;
     8   }else{
     9     return name.join("");
    10   } 
    11 }
    12 
    13 console.log(student("wei"));    // Mr.wei
    14 console.log(student(["wei","ze","yang"]));   // weizeyang

    即使用type创建类型别名,类型别名常用语联合类型。

    5.类型断言

    可以用来绕过编译器的类型推断,手动指定一个值的类型

    (1)语法有下面两种

    <类型>值    值 as 类型

    (2)举个栗子吧!

    1 function student(name:string|number){   
    2   return name.length;     
    3 }
    4 
    5 console.log(student("weizeyang"));
    6 
    7 // Property 'length' does not exist on type 'string | number'.
    8 // Property 'length' does not exist on type 'number'.

    当typescript不确定一个联合类型的变量到底是哪个类型的时候,我们就只能访问此联合类型的所有类型里共有的属性或方法。

    但是上述的length属性不是string和number共有的,所以报错咯

    1 function student(name:string|number){
    2   return name.toString();
    3 }
    4 
    5 console.log(student(3));   // 3

    这样他就乐意了,哎,可真难伺候!

    其实我觉得可以这样的:

    1 function student(name:string|number){   
    2   if(typeof name === "string"){
    3     return name.length;
    4   }else if(typeof name === "number"){
    5     return name.toFixed(2);
    6   }
    7 }
    8 
    9 console.log(student("weizeyang"));  // 9

    但是咱们要讲的是

    1 function student(name:string|number){
    2   if((<string>name).length){
    3     return (<string>name).length;
    4   }else{
    5     return name.toString().length;
    6   }
    7 }
    8 
    9 console.log(student(3));   // 1

    需要注意的是:

    (1)类型断言不是类型转换,即类型并没有发生实质性的改变,只是唬住了类型推断而已

    (2)不可以断言成联合类型中不存在的类型

  • 相关阅读:
    va_start、va_end、va_list的使用
    UNIX环境高级编程 apue.h头文件的配置
    Ant编译android程序
    Shell编程中Shift的用法
    命令生成和运行android项目
    ubuntu rar文件解压中文乱码问题
    SQLite区分大小写查询
    java命令执行jar包的方式
    ubuntu下安装与卸载软件方法
    linux下查看最后登陆的用户的信息
  • 原文地址:https://www.cnblogs.com/wzy1569178479/p/7341155.html
Copyright © 2011-2022 走看看