首页 > 解决方案 > 提取泛型函数中的 keyof'd 类型

问题描述

有没有办法T从函数类型中提取类型<K extends keyof T>(k: K) => T[K]

type T = { a: 'a'; b: 'b' }
type Fn = <K extends keyof T>(k: K) => T[K]

// This results in the return types being 'any'
type ValueOfT = Fn extends (k: keyof infer U) => any ? U : never


// This throws a compiler error
type ValueOfT2 = Fn extends <K extends keyof infer U>(k: K) => U[K]
  ? U
  : never


// Type isn't narrowed
type NotNarrowed = Fn extends (k: 'a') => infer U ? U : never
// so can't do this
type FnTypes = Fn extends (a: infer U) => any ? U : never
type ValueOfT3 = { [K in FnTypes]: Fn extends (a: K) => infer U ? U : never }


标签: typescriptgenerics

解决方案


推荐阅读