- 当要求自己実装タイプの抽出をする場合、Goose の name、age 属性を抽出する方法を考えることができます:
type Gooose={
name:string
age:number
getCuurent:()=>void
}
type FilterObj<T,U>={
[P in keyof T]:T[P]
}
// この場合、FilterObj はキーを反復処理していますが、抽出されるキーのタイプは常に不明です。したがって、アサーションを使用します:
type Gooose={
name:string
age:number
getCuurent:()=>void
}
type FilterObj<T,U>={
[P in keyof T as Exclude<P,U>]:T[P]
}
age をプロパティとして渡したと仮定します
const some:FilterObj<Gooose,'getCuurent'>={name:"sanm",age:99}
const some2:FilterObj=<Goose,'name'| 'age'>={
getcurrent:()=>alert("!!")
}
成功です👩🎤
方法 2#
値のタイプに基づいてインデックスをフィルタリングする
type Gooose={
name:string
age:number
getCuurent:()=>void
}
// neverはすべてのタイプのサブタイプであるため、キーがマージされると自動的に消えます
type FilterOptions<T,U>={
[P in keyof T]:T[P] extends U? never:P
}[keyof T] // 最後にユニオンタイプを抽出します
type oo=FilterOptions<Gooose,Fucnction>
// ooの戻り値のタイプは
{getCurrent:never,name:string,age:number}
// 同様に
type pp=FilterOptipns<Gooose,Function|age>
// 戻り値は{age:never,getCurrent:never,name:string}です
最終的な抽出結果はユニオンタイプ 'name' | 'age ' | 'getCurrent' です
type resut =Pick<Goose,pp>
対応するタイプが抽出され、成功です🙂
方法 3#
type Gooose={
name:string
age:number
getCuurent:()=>void
}
type Omit<T,U>=Pick<T,Exclude<keyof T,U>>
type try=Omit<Gooose,'name' | 'age'>