是否有一种方法(或解决方法)可以对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"];