从可选构造函数参数的返回类型推断类型

十美
type DefaultType = {.....};
class A<MyInferedType> {
  constructor(
    private readonly paramFunc: (response: MyInferedType) => any,
    private readonly optionalParamFunc?: () => Promise<MyInferedType>
  ) {}
  async doSomething() {
    // note the else branch! if optionalParamFunc is not defined i want to use a DefaultType value
    const result = this.optionalParamFunc ? this.optionalParamFunc() : {} as DefaultType ;
    this.paramFunc(result);
  }
}

我想MyInferedTypeoptionalParamFuncif推断给构造函数。如果没有通过,我希望它能通过DefaultType我在玩infer关键字,但没有成功。我猜有些专家可以向我解释什么是正确的方法。

我应该可以如下使用它:

const defVal: DefaultType = {...};
const inferedVal: AnyTypeOfChoice = {...};
const a = new A((defVal) => {...});
const a2 = new A((inferedVal) => {...}, async () => inferedVal);

游乐场链接

提香·切尔尼科娃·德拉戈米尔

您实际上并不需要条件类型(即infer关键字)的推断行为一个简单的参数类型default似乎可以完成这项工作:

type DefaultType = { d: string };
class A<MyInferedType = DefaultType> {
  constructor(
    private readonly paramFunc: (response: MyInferedType) => any,
    private readonly optionalParamFunc?: () => Promise<MyInferedType>
  ) {}
}

type AnyTypeOfChoice  = {a: string }
const defVal: DefaultType = { d: ""};
const inferedVal: AnyTypeOfChoice = { a: ""};
const a = new A((defVal) => { defVal.d });
const a2 = new A((inferedVal) => { inferedVal.a }, async () => inferedVal);

游乐场链接

关于实例化通用类型参数的值的问题,这是TS原则上不允许的。从类型的角度来看,checkthis.optionalParamFunc和type参数之间没有关系MyInferedType,因此就ts而言,您无法实例化任何对象,MyInferedType因为您实际上不知道它的外观。

您可以使用类型断言来解决此问题:

const result = this.optionalParamFunc ? await this.optionalParamFunc() : {d: "asdsad"} as any as MyInferedType;

请注意,我们可以设想实际上具有this.optionalParamFunc未定义的实例,而没有type参数DefaultTypenew A<AnyTypeOfChoice>((inferedVal) => { inferedVal.a })

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

类型构造函数参数推断

来自分类Dev

由基于构造函数可选参数的方法返回的类型

来自分类Dev

从函数返回类型推断模板参数类型

来自分类Dev

从枚举参数推断Typescript函数返回类型

来自分类Dev

从单个构造函数参数推断通用类类型参数

来自分类Dev

基于可选参数的函数返回类型

来自分类Dev

从函数参数推断类型参数

来自分类Dev

TypeScript推断接受函数作为参数的函数的返回类型

来自分类Dev

无法推断函数返回类型

来自分类Dev

如何基于函数的参数推断承诺的返回类型?

来自分类Dev

如何使用提供的参数推断函数的返回类型?

来自分类Dev

根据可变参数类型推断返回类型

来自分类Dev

高阶函数参数类型的类型推断错误

来自分类Dev

根据类型防护推断函数的返回类型

来自分类Dev

显式构造函数中的类型推断

来自分类Dev

在类型为并集的函数中无法正确推断参数和返回类型

来自分类Dev

解析参数的返回类型被推断为对象?

来自分类Dev

根据函数的返回值推断类型,其中函数参数是函数的记录

来自分类Dev

不确定如何推断函数参数类型

来自分类Dev

TypeScript-如何从构造函数输入参数中推断类型信息?

来自分类Dev

在Rascal模式匹配中推断构造函数关键字参数的类型

来自分类Dev

是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

来自分类Dev

如何推断函数对象的返回类型?

来自分类Dev

类型构造函数作为返回类型

来自分类Dev

带返回值的泛型函数参数的TypeScript参数类型推断?

来自分类Dev

从作为模板函数参数传递的std :: function推断返回值和参数类型?

来自分类Dev

类型推断如何与可选参数一起使用?

来自分类Dev

不能推断出可选的泛型类型的参数

来自分类Dev

打字稿:如何从返回函数的输入参数推断高阶函数中的泛型类型

Related 相关文章

  1. 1

    类型构造函数参数推断

  2. 2

    由基于构造函数可选参数的方法返回的类型

  3. 3

    从函数返回类型推断模板参数类型

  4. 4

    从枚举参数推断Typescript函数返回类型

  5. 5

    从单个构造函数参数推断通用类类型参数

  6. 6

    基于可选参数的函数返回类型

  7. 7

    从函数参数推断类型参数

  8. 8

    TypeScript推断接受函数作为参数的函数的返回类型

  9. 9

    无法推断函数返回类型

  10. 10

    如何基于函数的参数推断承诺的返回类型?

  11. 11

    如何使用提供的参数推断函数的返回类型?

  12. 12

    根据可变参数类型推断返回类型

  13. 13

    高阶函数参数类型的类型推断错误

  14. 14

    根据类型防护推断函数的返回类型

  15. 15

    显式构造函数中的类型推断

  16. 16

    在类型为并集的函数中无法正确推断参数和返回类型

  17. 17

    解析参数的返回类型被推断为对象?

  18. 18

    根据函数的返回值推断类型,其中函数参数是函数的记录

  19. 19

    不确定如何推断函数参数类型

  20. 20

    TypeScript-如何从构造函数输入参数中推断类型信息?

  21. 21

    在Rascal模式匹配中推断构造函数关键字参数的类型

  22. 22

    是否可以从 Typescript 中的非构造函数方法参数推断泛型类类型?

  23. 23

    如何推断函数对象的返回类型?

  24. 24

    类型构造函数作为返回类型

  25. 25

    带返回值的泛型函数参数的TypeScript参数类型推断?

  26. 26

    从作为模板函数参数传递的std :: function推断返回值和参数类型?

  27. 27

    类型推断如何与可选参数一起使用?

  28. 28

    不能推断出可选的泛型类型的参数

  29. 29

    打字稿:如何从返回函数的输入参数推断高阶函数中的泛型类型

热门标签

归档