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

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

文章目录

    • 1、‘&’符号
    • 2、‘|’符号
    • 3、‘‘Partial’’
    • 4、‘Required’
    • 5、‘Pick’
    • 6、 ‘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的类型
    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的类型
    let demo: Omit<testA, keyof testB>

    demo = {
        age: 18
    }

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

你可能感兴趣的:(js,typescript)