Dunno如何用这个短语表达问题,因为我不确定这是什么可能性,或者它是否具有更好的术语,但这是一个主意:
假设您的实用工具类型为:
type Unpack<T, K> = K extends keyof T ? T[K] : never;
// ☝️ gets a nested type from a given object type/interface
以及使用它的类型或接口,例如:
type ABC = { a: string, b: boolean, c: number }
使用该实用程序轻松创建新类型:
type TypeofA = Unpack<ABC, 'a'>
// ☝️ TypeofA = string
但是我们可以组成一个已经注入类型的实用程序吗?
type Unpacker<T> = unknown // <- what goes here? ?♂️
type UnpackABC = Unpacker<ABC> // <- to use like this
然后无需引用ABC类型就可以重用...
type A = UnpackABC<'a'> // string
type B = UnpackABC<'b'> // boolean
type C = UnpackABC<'c'> // number
答案 0 :(得分:3)
对于问题中的示例,您可以这样编写,而无需定义单独的Unpacker
类型:
type UnpackABC<K> = Unpack<ABC, K>
但是,不幸的是,您无法在示例中“填空”以使其生效。如果可能的话,必须在语义上(如果不是在语法上)是这样的:
type Unpacker<T><K> = Unpack<T, K>
也就是说,您想要的是currying,这对于函数是可能的,但对于类型是不可能的。