zoukankan      html  css  js  c++  java
  • type 关键字

    type常用用法
     type words = (word: string) => string //type 定义函数类型1
    type AddtionType={(a:number,b:number):number}  //type 定义函数类型2 很像接口是不是
    type methodType = 'GET' | 'POST' | 'get' | 'post' //定义字面量类型
     
    //type定义基本数据类型    
    let a0: number = 23 type A = number //number本身是个类型 我用type A去给number起个别名 搞出下面这个东西出来 let a: A = 23

    type定义对象数据类型

     // 通常type是这样定义类型的
      type PersonType = {
        name: string
        age: number
      }
    
      // 重点看下面这里
      let p = {
        name: 'zs',
        age: 10,
      }
      type PersonType1 = typeof p //typeof 可以由一个普通对象来定义一个类型A出来,然后用这个类型A去约束其他的变量
      let p1: PersonType = {
        name: 'lisi',
        age: 12,
      }

    keyof 索引类型查询操作符(拿到类型[interface|type|class]的key|数组的索引)

    // keyof 索引类型查询操作符(拿到对象的key|数组的索引)
      interface IPerson {
        name: string
        age: number
        gender: 'male' | 'female'
      }
      type PersonKeysType = keyof IPerson //得到interface接口的所有key集合组成一个type 类似于name|age|gender
      interface IGetValueByKeyFunc {
        (obj: IPerson, key: PersonKeysType): any
      }
      const getValueByKey: IGetValueByKeyFunc = (obj, key) => {
        return obj[key]
      }
    
      let person: IPerson = {
        name: 'zs',
        age: 10,
        gender: 'male'
      }
      console.log(getValueByKey(person, 'name'))

    由type生成interface

     interface IPerson {
        name: string
        age: number
        like: Array<string>
      }
      interface IPickedPerson extends Pick<IPerson, 'name' | 'like'> { } //生成新的接口
      const p: IPickedPerson = { name: 'zs', like: ['a', 'b'] }

    Partial|Required|Readonly|Pick

    interface IPerson {
      name: string
      age: number
      gender: 'male' | 'female'
    }
      
      // ts自带Partial 将一个已知的类型(接口)每个属性都变为可选的:注意使用type关键字定义的
      type PartialPerson2 = Partial<IPerson>
    
      type RequiredPerson3 = Required<IPerson> //ts内置 Required<type|interface|class> PartialPerson1是type类型 同样也可以传入接口
      let requiredP: RequiredPerson3 = { name: 'zs', age: 10, gender: 'male' }
    
      type ReadOnlyPerson = Readonly<RequiredPerson3> //Readonly<type|interface|class>
      let readonlyP: ReadOnlyPerson = {
        name: 'zs', age: 10, gender: 'male'
      }
     
      type PickPerson = Pick<IPerson, 'name' | 'age'> //Pick<interface|type|class> 原来是必须|可选|可读 选出来的也是同样属性。 |属性分割表示可以选出多个
      let pickPerson: PickPerson = { name: 'zs', age: 10 }

    Exclude|Extract|NonNullable|ReturnType|InstanceType

    //Exclude|Extract|NonNullable|ReturnType|InstanceType
        type E = Exclude<string | number | boolean, string | boolean> //Exclude<A,B> //把类型B从类型A中剔除
        let e: E = 10
    
        type E2 = Extract<string | number, string> //Extract<A,B> 从类型A中提取类型B 
        let e2: E2 = '12'
    
        type E3 = NonNullable<string | number | null | undefined>
        let e3: E3 = null
    
        function getUserInfo(){
          return {name:'zs',age:10}
        }
        type UserInfo=ReturnType<typeof getUserInfo> //拿到返回值类型
        let userInfo: UserInfo={name:'lisi',age:10}
    
        class Person {
          name:string
          age:number
          constructor(name:string,age:number){
            this.name=name
            this.age=age
          }
        }
        
        type P=InstanceType<typeof Person>
        let p:P=new Person('zs',10)
        console.log(p);
  • 相关阅读:
    Create a toolwindow for the VBA editor with .NET(C#).
    批量采集世纪佳缘会员图片及winhttp异步采集效率
    写了一个Windows API Viewer,提供VBA语句的导出功能。提供两万多个API的MSDN链接内容的本地查询
    mysql主从复制
    windows实现MySQL主从复制
    理解“业务逻辑”的含义
    数据库主从复制与读写分离(了解)
    windows下npm安装vue
    phpstorm中配置真正的远程调试(xdebug)
    PHP常量详解:define和const的区别
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/14949660.html
Copyright © 2011-2022 走看看