zoukankan      html  css  js  c++  java
  • typescript 使用的几种情况

    接口的创建

    可以使用 type 和 interface 来创建类型

    type 特有的优点:

    1. 声明基本类型别名,联合类型,元组等类型
        type S = string;
        
        type IFoo = IBar | string;
    
    1. 可使用 typeof 获取实例的类型赋值
        const a:number = 1;
        const IA = typeof a;
        // IA 被 ts 识别为 number
    

    interface 特有的优点

    interface 能够声明合并

    interface IFoo {  
      name:string  
    }  
    interface IFoo {  
      age:number  
    }
    // 等于
    type IFoo = {
        name:string 
        age:number
    }
    

    关于对象

    获取对象

    以IFoo作为例子

    interface IFoo {  
      name:string  
      age:number  
      gender:string  
    }  
    

    获取接口的单个属性的类型

    type IBar = IFoo["name"]
    // IBar = string
    

    获取接口中一或多个属性,并将其合并为一个接口

    type IBar = Pick<IFoo, "name">
    // IBar = {name: string}
    
    type IBar = Pick<IFoo, "name" | "age">
    // IBar = {name: string, age: number}
    

    忽略接口中的某些属性,将剩余属性作为一个接口

    type IBar = Omit<IFoo, "name">
    // IBar = {age: number, gender: string}
    

    获取接口中所有键

    type IBar = keyof IFoo
    // IBar = "name" | "age" | "gender"
    

    获取接口中所有键对应的值

    type IBar = IFoo[keyof IFoo]
    // IBar = string | number
    

    创建对象

    创建多个重复值的对象

    type IBar = Record<"name" | "age", string>
    // IBar = {name: string, age: string}
    

    使用例子

    interface IFoo {  
      name: string  
      age: string  
      gender: string  
      
      getSkill(): void  
      
      setSkill: (skill: string[]) => void  
    }
    // 生成一个新类型,将 age 和 gender 的类型修改为 number,其他的类型不变
    // 使用上述知识 声明一个新的高级类型IBar:
    type IBar<K extends string,T = number> = (Record<K, T> & Omit<IFoo, K>)
    
    type IBaz = IBar<"age" | "gender">
    // 生成新的类型 IBaz ,符合上述描述
    // 并且使用 Ibar 可将 age 和 gender (或其他)更改为任意其他类型 如:
    type IBax = IBar<"age" | "gender" | "name", string[]>
    

    关于函数

    函数类型创建

    创建函数类型的两种方式

    interface IFoo {  
      name: string  
      age: number  
      gender: string  
      
      getSkill(): void  // type 不支持此种声明
      
      setSkill: (skill: string[]) => void  
    }
    

    函数类型中参数的获取

    以此为例子:

    type IFoo = (name: string, age: number) => { name: string, age: number, gender: string }
    

    获取函数的参数类型:

    type IBar = Parameters<IFoo>  
      
    // IBar = [string, number]
    

    获取函数的返回类型:

    type IBar = ReturnType<IFoo>  
      
    // IBar = {name: string, age: number, gender: string}
    
  • 相关阅读:
    wince嵌入式应用程序开发环境搭建
    用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败
    git# 建立个人级服务器仓库 git init bare
    Bind和Eval的区别详解
    控件包含代码块(即 <% ... %>),因此无法修改控件集合 (转自http://blog.csdn.net/wangchao1982/archive/2007/11/19/1892472.aspx)
    Sys.ArgumentOutOfRangeException: Value must be an integer 错误的原因
    判断Cookies是否处于开启状态
    多个解决方案引用同一工程文件时冲突的解决方法
    javascript无提示的关闭页面
    Server.MapPath()
  • 原文地址:https://www.cnblogs.com/Grewer/p/12327989.html
Copyright © 2011-2022 走看看