是否有一种方法(或解决方法)可以对typescript类型/接口进行解构?

是否有一种方法(或解决方法)可以对typescript类型/接口进行解构?,typescript,Typescript,假设我有一个类有很多类型参数: class BaseClass<T extends T1, U extends U1, V extends V1, /* etc. */ > 类基类 是否有一种方法可以创建一个单一类型的参数,允许按照ES6中对象的处理方式进行“扩展”或“解构” 因此,不需要将子类实现为 class FooClass extends BaseClass<TFoo, UFoo, VFoo, /* etc. */ > class FooClass扩展了基

假设我有一个类有很多类型参数:

class BaseClass<T extends T1, U extends U1, V extends V1, /* etc. */ > 
类基类
是否有一种方法可以创建一个单一类型的参数,允许按照ES6中对象的处理方式进行“扩展”或“解构”

因此,不需要将子类实现为

class FooClass extends BaseClass<TFoo, UFoo, VFoo, /* etc. */ >
class FooClass扩展了基类
我可以设置所有类型参数并一次性传递它们

// example of what I'd like to be possible:
metatype FooTypes = <TFoo, UFoo, VFoo, /* etc. */>
class FooClass extends BaseClass<...FooTypes>
//我希望实现的示例:
元类型足迹类型=
类FooClass扩展了基类
我希望这样做的原因是,我有不同的对象,它们负责实体的不同属性,如“notes”和“comments”,它们有近十几种关联类型(例如,本地形状、API响应、第三方缓存中的形状等)但并不是每一个与它们交互的对象都需要处理其中的每一种类型

我想做的是传递一个引用,例如“NoteTypes”、“CommentTypes”,它的基本意思是“您可以映射您需要的任何类型参数。”

我所描述的问题似乎最好通过“类型解构”来解决,但似乎表明这还不可能


代替实际的类型分解,最好的方法是什么

没有这样的语法可以在中的类型级别执行对象分解,也没有在中的类型级别执行数组分解。但幸运的是,您可以通过执行对象/元组类型索引。如果您有一个对象类型
typem={foo:F,bar:B}
,其中
F
B
是现有的类型,那么您可以通过在
M
M[“foo”]
中查找
“foo”
来恢复
F
。而
B
M[“bar”]

鉴于此,您可以决定将您的
T
U
V
等打包为类型
M
的单个映射,如下所示:

class BaseClass<M extends { T: T1, U: U1, V: V1 }> { /* ... */ }
这里的一个例子是,
BaseClass
有一个构造函数,它使用旧的
T
U
V
类型的参数


然后,您的子类化便利代码如下所示:

type FooTypes = { T: TFoo, U: UFoo, V: VFoo }
class FooClass extends BaseClass<FooTypes> { }
但这相当冗长,只适用于全局或函数范围,而不适用于类(请参见),因此在实践中,我可能只使用
M[“T”]
M[“U”]
等,无论我以前在哪里使用
T
U


好吧,希望这会有帮助;祝你好运

type FooTypes = { T: TFoo, U: UFoo, V: VFoo }
class FooClass extends BaseClass<FooTypes> { }
    type T = M["T"];
    type U = M["U"];
    type V = M["V"];