TypeScript-进阶(八)-类型演算-关键字

28 阅读1分钟

1.typeof关键字

在ts中,typeof关键字可以获取某个数据的类型

const str: string = '1212'
// 通过 typeof 拿到 str的类型,并赋值给str2
const str2: typeof str = 'asldfasjl'

若typeof修饰的类,则得到的类型,就是类的构造函数

class A { }
// 通过 typeof 获取到构造函数A
function getInstance(cls: typeof A): A {
    return new cls()
}

const a = getInstance(A)
console.log(a);

2.keyof关键字

在ts中,keyof关键字可以作用于类、接口、类型别名,用于获取其他类型中的所有成语的联合类型

type Test = {
    name: string
    age: number
}
// 通过keyof 限制 val值只能为 name | age 联合声明中的一种
function test(key: string, val: keyof Test) { }
test('121', 'name')

3.in 关键字

在ts中,in关键字往往和keyof联用,用于限制某个索引类型的取值范围

type Test = {
    name: string
    age: number
}

// 通过 keyof 获取到Test的所有类型,并将类型限制为string类型
type Test2 = {
    [p in keyof Test]: string
}

const t: Test2 = {
    name: 'adfasd',
    age: '12'
}




// 通过 keyof 获取到Test的所有类型,并将类型限制需与原本的保持一致
type Test3 = {
    [p in keyof Test]: Test[p]
}

const t3: Test3 = {
    name: 'adfasd',
    age: 12
}


4.实现Readonly只读类型

type Test = {
    name: string
    age: number
}

type Readonly1<T> = {
    readonly [p in keyof T]: T[p]
}

const t: Readonly1<Test> = {
    name: 'adfasd',
    age: 12
}

5.实现Partial可选类型

type Test = {
    name: string
    age: number
}

type Partial1<T> = {
    [p in keyof T]?: T[p]
}

const t: Partial1<Test> = {
    name: 'adfasd',
    age: 12
}

6.实现Required必选类型

type Test = {
    name?: string
    age?: number
}

type Required1<T> = {
    [p in keyof T]-?: T[p]
}

const t: Required1<Test> = {
    name: 'adfasd',
    age: 12
}