type A = Awaited<Promise<string>>;
// A = string;
type A = Awaited<Promise<Promise<number>>>;
// A = string;
type A = Awaited<string>
// A = string;
type A = Awaited<boolean | Promise<number>>;
// A = boolean | number
示例
type GetListType = ()=>Promise<string>
const getList:GetListType = ()=> new Promise((resolve)=>{
setTimeout(()=>{
resolve('123')
}, 1000)
})
async function fn(){
// ReturnType接收函数,并返回该函数返回值的类型
// 在这个例子里ReturnType<GetListType> = Promise<string>
const res:Awaited<ReturnType<GetListType>> = await getList()
}
type Fn1 = (...args: number[])=>string
type Fn2 = (age: number, name: string) => string
type A = Parameters<Fn1>; // number[]
const a: A = [1]
type B = Parameters<Fn2> // []
const b:B = [18,'小明']
ReturnType
返回函数返回值的类型。
type Fn1 = (...args: number[])=>string
type A = ReturnType<Fn1>; // string
const a: A = '1'
ConstructorParameters
从构造函数类型的参数类型构造元组或数组类型。它产生一个包含所有参数类型的元组类型(如果 Type 不是函数,则类型 never )。
type T0 = ConstructorParameters<ErrorConstructor>;
// type T0 = [message?: string | undefined]
class Fn{
constructor(a:string, b?:number){}
}
type T1 = ConstructorParameters<typeof Fn>;
// type T1 = [a: string, b?: number | undefined]
InstanceType
构造一个由 Type 中构造函数的实例类型组成的类型。
class Fn{
a: string;
b?:number;
constructor(a:string, b?:number){
this.a = a;
this.b = b
}
}
type T1 = InstanceType<typeof Fn>;
const t1: T1 = new Fn('',1) // ✔
const t2:T1 = new Error('') // ✖
ThisParameterType
提取函数类型的 this参数的类型,如果函数类型没有 this参数,则为unknown
function toHex(this: Number, name: string) {
return this.toString() + name;
}
console.log(toHex.call(10, ' name'))
// 10 name
type ToHexThisParameters = ThisParameterType<typeof toHex>
// type ToHexParameters = Number
const toHexThisParameters:ToHexThisParameters = Number(10)