加深我对typeScript的印象(&、|、Partial、Required、Pick、Omit)

发现有错误、或者理解错误,及时联系我,感谢!!


testA、testB、testC是我下面要用到的类

type testA = {
    name: string,
    age: number
}

type testB = {
    name: string,
    sex: number
}

type testC = {
    name: string,
    address?: string
}

1、‘&’符号

‘&’表示合并两个类型

//此时的demo类型就是testA 与 testB的合并类型
let demo:testA & testB

//没问题,
demo = {
name:'tjq',
age:18,
sex:1
}

//报错,因为此时没有sex字段
demo = {
name:'tjq',
age:18,
}

//倘如testB修改为
type testB = {
name:number,
sex:number
}
//由于testB和testA共同存在name属性,并且name属性类型不同,n合并后name属性会变成never类型(报错)

2、‘|’符号

{
    // ‘|’ 此时b的类型表示要么满足testA的类型、要么满足testB的类型,或者两种都满足
    let demo: testA | testB

    demo = {
        name: '123',
        sex: 2
    }

    demo = {
        name: "123",
        age: 18,
        sex: 1
    }
    
}

3、‘‘Partial’’

//‘Partial’这个关键字表示将某个类的所有属性全部转为可选
let demo: Partial<testA>

//demo不进行赋值,没问题
demo = {
}
//demo仅赋值一个name属性,没问题
demo = {
name:"tjq"
}

4、‘Required’

//‘Required’这个同‘Partial’恰恰相反,这个关键字是将类的所有属性转为必填
let demo:Required<testC>
//没问题
demo = {
name:"tjq",
address:"NanJing"
}
//报错,本身address是可选的,但是通过‘Required’转为了必填
demo = {
name:"tjq",
}

5、‘Pick’

//‘Pick’ 表示过滤出一个属性   pick<type,key>,从type参数里面"挑选出"key的类型
    let demo: Pick<testA, "name">

    demo = {
        name: 'tjq',
    }

    // 报错,age类型已经被‘Pick’过滤
    // demo = {
    //     name: 'tjq',
    //     age:18
    // }

    let demo2: Pick<testA, keyof testA>

    demo2 = {
        name: "tjq",
        age: 18
    }

6、 ‘Omit’

{
    //  ‘Omit’   表示过滤出一个属性   Omit<type,key>,从type参数里面”去掉“key的类型
    let demo: Omit<testA, keyof testB>

    demo = {
        age: 18
    }

    // 报错,name类型已经被‘Omit’过滤
    // demo = {
    //     name: 'tjq',
    //     age:18
    // }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值