• typescript中的类型type与接口interface


    typescript中的type相当于是给类型起一个新的名字

    基本用法:
    比如我想声明一个类型为number的年龄age,刚开始学typescript,我们可能会这样写

    let age:number = 10
    
    • 1

    接触到type也可以这样写

    //这里的second其实代表的就是number
    type second = number
    
    let b:second = 20
    
    • 1
    • 2
    • 3
    • 4

    关键字:《1》pick:挑选指定的类型

    interface Person {
      name: string;
      age: number;
      id: number;
      sex: 0 | 1;
    }
    
    // 问女生年纪不太礼貌,所以我们不需要 age 这个属性
    type Woman = Pick<Person, "name" | "id">;
    
    //返回值:
    woman:{
    	name: string;
    	id: number;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    《2》K extends keyof T:“或”匹配所有可能的类型
    如下式代码

    interface person {
        name:string,
        sex:string,
        age:number
    }
    
    // K extends keyof person
    // 这里的k可能是
    {
        name:string,
    }
    
    {
        name:string,
        sex:string,
    }
    
    {
        name:string,
        sex:string,
        age:number
    }
    等等
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    《3》type可以使用in关键字生成映射类型,这里的key获取的是

    type Keys = "name" | "sex"
    
    type DulKey = {
        [key in Keys]: string    // 类似for...in
    }
    
    let stu: DulKey = {
        name: "wang",
        sex: "man"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    类型type其实和接口interface有些像,但是两者区别在哪:
    (1)extends 和 &
    接口interface可以通过extends拓展
    其实extends相当于一个加好+,将personage和personall键值对进行合并

    interface personage {
        age:number
    }
    
    interface personall extends personage {
        name:string
    }
    
    let person:personall = {
        name:"xiaoming",
        age:14
    }
    console.log(person)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    类型type可以通过&实现类型的交叉

    type personage = {
        age:number
    }
    
    type personname = {
        name:string
    }
    
    let personall:personage&personname = {
        age:13,
        name:"xiaoming"
    }
    
    console.log(personall)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (2)两者关联:

    // interface 扩展 type
    type Name = {
        name: string;
    }
    interface User extends Name {
        age: number;
    }
    let stu:User={name:'wang',age:1}
    
    // type 与 interface 交叉
    interface Name {
        name: string;
    }
    type User = Name & {
        age: number;
    }
    let stu:User={name:'wang',age:1}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    (3)接口interface可以声明多次,声明多次相当于扩展,如下式代码,这个person声明了3次,那么它所应该具有的属性是3个,如果少写了,ts就会报错;type不可以定义多次

    interface person {
        name:string
    }
    
    interface person {
        age:number
    }
    
    interface person {
        sex:string
    }
    
    
    
    let stu:person = {
        name:"xiaoming",
        age:12,
        sex:"男"
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    五表联筛:从五个表格中筛选出出现过两次及两次以上的人名
    HBase中的数据表是如何用CHAT进行分区的?
    Java/JDK 21正式发布!15个特性一览
    Gradient Harmonized Single-stage Detector
    Webpack优化
    【Rust日报】2023-09-25 Rust + Wasm 是 AGI 的语言吗
    第二十六章CSS3基础
    PoC免写攻略
    【Telegraf 介绍】
    Docker Swarm总结
  • 原文地址:https://blog.csdn.net/m0_52518047/article/details/127768935