上文介绍了一些内置类型的作用,此文介绍一下剩余的类型
Parameters 从 函数类型T中使用的参数类型 构造元组类型
现在在有条件类型的 extends 子语句中,允许出现 infer 声明,它会引入一个待推断的类型变量。 这个推断的类型变量可以在有条件类型的 true 分支中被引用。 允许出现多个同类型变量的 infer。
type Parameters any> = T extends (...args: infer P) => any ? P : never
type Exp13 = (title:string,age:number)=>void;
type ParametersExp13 = Parameters
结果:
type ParametersExp13 = [title: string, age: number]
ConstructorParameters 从构造函数的参数类型来构造元组类型
type ConstructorParameters any> = T extends abstract new (...args: infer P) => any ? P : never
interface Exp14 {
new(title:string,age:number):Object
}
type ConstructorParametersExp14 = ConstructorParameters
结果为:
type ConstructorParametersExp14 = [title: string, age: number]
ReturnType 构造一个由函数类型 T返回类型组成的类型
type ReturnType any> = T extends (...args: any) => infer R ? R : any
type Exp15 = (title:string,age:number) => string| number;
type ReturnTypeExp15 = ReturnType
结果:
type ReturnTypeExp15 = string | number
InstanceType 返回由T中构造函数的实例组成的类型
type InstanceType any> = T extends abstract new (...args: any) => infer R ? R : any
interface Exp17{
title:string;
age:number
}
interface Exp16 {
new(title:string,age:number):Exp17;
}
type InstanceTypeExp16 = InstanceType
结果
type InstanceTypeExp16 = Exp17
ThisParameterType 返回T函数类型中this参数的类型,无返回unkonwn
type ThisParameterType = T extends (this: infer U, ...args: never) => any ? U : unknown
// 声明
type Exp18 = (this:number)=>number;
type ThisParameterTypeExp18 = ThisParameterType
// 未声明
type Exp181 = (age:number)=>number;
type ThisParameterTypeExp181 = ThisParameterType
结果:
// 声明
type ThisParameterTypeExp18 = number
// 未声明
type ThisParameterTypeExp181 = unknown
OmitThisParameter 从 T函数类型中移除this参数 如果不存在 返回T 存在这创建一个不带此参数的新函数类型
type OmitThisParameter = unknown extends ThisParameterType ? T : T extends (...args: infer A) => infer R ? (...args: A) => R : T
type Exp19 = (this:number,age:number,title:string)=>number;
type OmitThisParameterExp19 = OmitThisParameter
结果:
type OmitThisParameterExp19 = (age: number, title: string) => number
ThisType 在对象字面量中键入this 为Type,并可以通过上下文类型控制this类型
使用限制:
interface ThisType
type Exp20 = {bar:()=>void}
type ThisTypeExp20 = Exp20 & ThisType<{title:string}>
const Exp20: ThisTypeExp20 = {
bar() {
console.log(this.title);
}
}
结果:
this: {
title: string;
}
将StringType转为全大写/小写,ts通过内置关键字intrinsic在编译器实现
type Uppercase = intrinsic
type Lowercase = intrinsic
// Uppercase
type Exp21 = 'titLe';
type UppercaseExp21 = Uppercase
// Lowercase
type Exp22 = 'TiTLE';
type LowercaseExp22 = Lowercase
结果:
type UppercaseExp21 = "TITLE"
type LowercaseExp22 = "title"
将 string type 首字母转为大写/小写,通过关键字 intrinsic编译阶段实现
type Capitalize = intrinsic
type Uncapitalize = intrinsic
//Capitalize
type Exp23 = 'title';
type CapitalizeExp23 = Capitalize
// Uncapitalize
type Exp24 = 'Title'
type UncapitalizeExp24 = Uncapitalize
结果:
type CapitalizeExp23 = "Title"
type UncapitalizeExp24 = "title"