如何获取工厂方法的类属性的接口类型

艾伦

我的一些代码中有一个工厂方法,我不仅要传递要实例化的Class类型,还要传递一组默认值以供类中的属性使用。我想获得类型,以便编译器将告诉我是否尝试传入实例化的类类型中不存在的属性。我不知道如何做到这一点。

这是一个简单的示例,显示了我想做什么。

尝试时,出现编译器错误:“一个接口只能扩展一个类或另一个接口。” 接口,ClassProps因为它不能从扩展T

class Base {
   myId: number;
}

class Klass1 extends Base {
   myString: string;
   myNumber: number;
}

interface IBaseCtr<T> {
   new (): T;
}

// Get an interface that is the properties of the class passed
interface ClassProps<T extends Base> extends T {}

// This method compiles, but doesn't check the prop names
//function factory<T extends Base>(ctrFunc: IBaseCtr<T>,
//                                 initialData?: Object): T

function factory<T extends Base>(ctrFunc: IBaseCtr<T>,
                                 initialData?: ClassProps<T>): T
{
   let new_obj = new ctrFunc();
   Object.assign(new_obj, initialData);
   return new_obj;
}


let v1 = factory(Klass1, {myId: 10, myString: 'foo'});

let v2 = factory(Klass1, {badVar: 10});

有任何想法如何initialData输入,以便badVar在第二次调用中将其标记为不允许输入吗?

帕斯

我认为这是一个可爱的问题。

这是我的方法。完全删除该接口。

function factory<T extends V, V extends Base>(ctrFunc: IBaseCtr<T>,
                                 initialData?: V): T
{
   let new_obj = new ctrFunc();
   Object.assign(new_obj, initialData);
   return new_obj;
}

这样就建立了一个层次结构,Base是V中属性的子集,它本身也是T(您的最终类型)中属性的子集。v1被分配而没有错误。v2的赋值语句在编译时导致错误。

您实际上可以继续删除该extends Base部分,以使此功能可在更多地方使用。它将仍然以相同的方式进行类型检查。

对于傻笑,类型正确检查的完全独立的工厂功能签名:

function factory<T extends V, V>(ctrFunc: new () => T,
                                 initialData?: V): T

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取多个联合接口类型的属性的值?

来自分类Dev

依赖类型的工厂方法

来自分类Dev

依赖类型的工厂方法

来自分类Dev

如何创建一个工厂,该工厂根据Java中的接口类型创建类?

来自分类Dev

如何从接口类型检查属性是否正确?

来自分类Dev

C#如何使工厂方法返回子类类型

来自分类Dev

如何创建返回不同接口类型和抽象类的通用工厂

来自分类Dev

值类型如何实现接口类型?

来自分类Dev

工厂方法如何返回接口和抽象类的实例?

来自分类Dev

返回接口类型的Java方法

来自分类Dev

接口类型的Golang String方法

来自分类Dev

返回接口类型的Java方法

来自分类Dev

如何检查接口类型的联合参数

来自分类Dev

CLR如何加载接口类型?

来自分类Dev

如何指示Ninject将工厂方法用于给定类型的任何请求的子类型?

来自分类Dev

如何指示Ninject将工厂方法用于给定类型的任何请求的子类型?

来自分类Dev

如何在该接口类型的对象上调用实现接口的类中的方法?

来自分类Dev

接口类java中的静态工厂方法

来自分类Dev

如何从Typescript中的类属性(省略方法)派生接口?

来自分类Dev

如何在NEST中索引和搜索接口类型的嵌套属性

来自分类Dev

如何使用接口类型化数组属性序列化对象?

来自分类Dev

接口类型推断

来自分类Dev

如何在温莎城堡工厂方法中达到请求的类型?

来自分类Dev

在包含所述接口类型的成员的类上定义接口类型的正确方法

来自分类Dev

在构造之前如何定义可以在类上使用的属性(例如,用于工厂方法)?

来自分类Dev

如何在python中获取类属性(Django模型)的类型

来自分类Dev

Com接口类型为IDispatch时的默认属性

来自分类Dev

如何在接口类型的引用上调用Object类的方法?

来自分类Dev

如何通过接口类型检测Java局部变量,然后找到在其上调用的方法?

Related 相关文章

  1. 1

    如何获取多个联合接口类型的属性的值?

  2. 2

    依赖类型的工厂方法

  3. 3

    依赖类型的工厂方法

  4. 4

    如何创建一个工厂,该工厂根据Java中的接口类型创建类?

  5. 5

    如何从接口类型检查属性是否正确?

  6. 6

    C#如何使工厂方法返回子类类型

  7. 7

    如何创建返回不同接口类型和抽象类的通用工厂

  8. 8

    值类型如何实现接口类型?

  9. 9

    工厂方法如何返回接口和抽象类的实例?

  10. 10

    返回接口类型的Java方法

  11. 11

    接口类型的Golang String方法

  12. 12

    返回接口类型的Java方法

  13. 13

    如何检查接口类型的联合参数

  14. 14

    CLR如何加载接口类型?

  15. 15

    如何指示Ninject将工厂方法用于给定类型的任何请求的子类型?

  16. 16

    如何指示Ninject将工厂方法用于给定类型的任何请求的子类型?

  17. 17

    如何在该接口类型的对象上调用实现接口的类中的方法?

  18. 18

    接口类java中的静态工厂方法

  19. 19

    如何从Typescript中的类属性(省略方法)派生接口?

  20. 20

    如何在NEST中索引和搜索接口类型的嵌套属性

  21. 21

    如何使用接口类型化数组属性序列化对象?

  22. 22

    接口类型推断

  23. 23

    如何在温莎城堡工厂方法中达到请求的类型?

  24. 24

    在包含所述接口类型的成员的类上定义接口类型的正确方法

  25. 25

    在构造之前如何定义可以在类上使用的属性(例如,用于工厂方法)?

  26. 26

    如何在python中获取类属性(Django模型)的类型

  27. 27

    Com接口类型为IDispatch时的默认属性

  28. 28

    如何在接口类型的引用上调用Object类的方法?

  29. 29

    如何通过接口类型检测Java局部变量,然后找到在其上调用的方法?

热门标签

归档