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
}