banner
SlhwSR

SlhwSR

热爱技术的一名全栈开发者
github
bilibili

ts断言奇技淫巧

  1. 当要求自己実装タイプの抽出をする場合、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'>
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。