interfacePerson{
name?: string
age: number
gender: number
}// 只读
type ReadOnlyType<T>={
// T 就是要修改的interface Person
readonly [Pin keyof T]:T[P]}// 可选
type MayType<T>={
[Pin keyof T]?:T[P]}// 必有
type MustType<T>={
[Pin keyof T]-?:T[P]}
新增可选 语法糖 Partial 必选语法糖 Required
type MayType = Partial<T> (和上面keyof实现的等效)
type MustType = Required<T>
2.利用keyof将某个interface里的索引全部转为联合类型
例子:
interfacePerson{
name: string
age: number
gender: number
}
type ReadOnlyType = keyof Person
// type ReadOnlyPerson = 'name' | 'age' | 'gender'
// Pick的定义
type Omit<T,Kextendsstring| number | symbol>={
[Pin Exclude<keyof T,K>]:T[P];}
例子:
interfacePerson{
name: string
age: string
c: string
}
type NewInterface = Omit<Person,'name'|'age'>// type NewInterface = {
// c: string;// }
6. 利用InstanceType从一个类里面获取interface
类型推导:
// InstanceType的定义
type InstanceType<Textendsabstractnew(...args: any)=> any>=Textendsabstractnew(...args: any)=> infer R?R: any
例子:
classA{
name: string
age: string
c: string
constructor(name: string,age: string,c: string){
this.name = name
this.age = age
this.c = c
}}
type NewInterface = InstanceType<typeofA>// type NewInterface = {
// name: string;// age: string;// c: string;// }
7. 利用ConstructorParameters从类中获取构造函数constructor的类型
类型推导:
type ConstructorParameters<Textendsabstractnew(...args: any)=> any>=Textendsabstractnew(...args: infer P)=> any ?P: never
例子:
classPerson{
name: string;age: number;constructor(name: string,age: number){
this.name = name;this.age = age;}}
type PT=ConstructorParameters<typeof Person>// type PT = [name: string, age: number]
type ET=ConstructorParameters<ErrorConstructor>// type ET = [message?: string]
type NT=ConstructorParameters<null>// type NT = unknown[]
type AT=ConstructorParameters<any>// type AT = unknown[]
8. 利用Parameters从函数的参数中推导出类型
类型推导:
type Parameters<Textends(...args: any)=> any>=Textends(...args: infer P)=> any ?P: never
例子:
constfn=(a: number,b: string)=>{
console.log(a);}
type A= Parameters<typeof fn>// type A = [a: number, b: string]consta:A=[1,'1']
9. 利用ReturnType从函数的参数中推导出类型
类型推导:
type Parameters<Textends(...args: any)=> any>=Textends(...args: infer P)=> any ?P: never
例子:
constfn=(a: number,b: string)=>{
console.log(a);return[1,'1']}
type A= ReturnType<typeof fn>// type A = (string | number)[]consta:A=[1,'1']