是否可以在Typescript中创建可组合的实用程序类型?

是否可以在Typescript中创建可组合的实用程序类型?,typescript,typescript-generics,Typescript,Typescript Generics,我不知道如何表达这个问题,因为我不确定什么是可能的,或者它是否有更好的术语,但我的想法是: 假设您有一个实用程序类型,如: type Unpack<T, K> = K extends keyof T ? T[K] : never; // ☝️ gets a nested type from a given object type/interface 使用该实用程序可以轻松创建新类型: type TypeofA = Unpack<ABC, 'a'> // ☝️ Typeo

我不知道如何表达这个问题,因为我不确定什么是可能的,或者它是否有更好的术语,但我的想法是:

假设您有一个实用程序类型,如:

type Unpack<T, K> = K extends keyof T ? T[K] : never;
// ☝️ gets a nested type from a given object type/interface
使用该实用程序可以轻松创建新类型:

type TypeofA = Unpack<ABC, 'a'>
// ☝️ TypeofA = string
TypeofA类型=解包
// ☝️ TypeofA=字符串
但是我们可以用已经注入的类型组合一个实用程序吗

type Unpacker<T> = unknown // <- what goes here? For the example in the question, you can write it like this, without defining a separate 
Unpacker
type:

type UnpackABC<K> = Unpack<ABC, K>

type Unpacker=unknown/对于问题中的示例,您可以这样编写,而无需定义单独的
Unpacker
类型:


type unpackab=Unpack,可用于函数,但不可用于类型。

对于问题中的示例,您可以这样编写,而无需定义单独的
解包类型:


type Unpack abc=Unpack,可以用于函数,但不能用于类型。

您能展示一下您的用例吗?我想我明白你的意思了,但我建议你不要这样做,因为这样会使事情复杂化,让人更难理解代码在做什么,这在某种程度上会破坏打字系统。没有内置的打字脚本,所以没有好的方法来表示这种转换。你可以把东西从类型级推到值级,然后用函数来伪造它,但是它到处都是无用的代码,这可能不值得。谢谢,这很有趣,因为我们是更高级的类型,但有点让我不知所措。关于不值得这样做可能是对的。你能展示一下你的用例吗?我想我明白你的意思了,但我建议你不要这样做,因为这样会使事情复杂化,让人更难理解代码在做什么,这在某种程度上会破坏打字系统。没有内置的打字脚本,所以没有好的方法来表示这种转换。你可以把东西从类型级推到值级,然后用函数来伪造它,但是它到处都是无用的代码,这可能不值得。谢谢,这很有趣,因为我们是更高级的类型,但有点让我不知所措。也许不值得这么做是对的。谢谢,我想这就是我想要确认的,咖喱是不可能的。不好意思,那会很有用的。谢谢,我想这就是我要找的确认,咖喱是不可能的。不好意思,那会很有用的。
type Unpacker<T> = unknown // <- what goes here? For the example in the question, you can write it like this, without defining a separate 
Unpacker
type:

type UnpackABC<K> = Unpack<ABC, K>