不知道如何表达这个问题,因为我不确定什么是可能的,或者它是否有更好的术语,但这是这个想法:
假设您有一个实用程序类型,例如:
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