【问题标题】:Determine return type of generic function based on function parameter根据函数参数确定泛型函数的返回类型
【发布时间】:2021-10-07 22:55:55
【问题描述】:

我有一组 Typescript 函数,如下所示:

useMyHook = <T>(name: MyType) : T => {
    // do stuff here
}

参数的类型是一组固定的字符串:

type MyType = "foos" | "bars" | "bazs"

这一切都很好,但它留下了一些错误的空间,并且比必要的更冗长,因为参数“name”和类型“T”是直接连接的并且总是需要匹配。如果 name 参数是“foos”,则泛型类型 T 是 Foo,如果参数是“bars”,则类型是 Bar。

我可以为每种类型创建单独的强类型函数,但问题是存在大量类型和几个不同的函数。如果不进行自动代码生成,这将非常乏味。

正如您可能从命名中猜到的那样,这是 React 的自定义钩子,它增加了另一个复杂性。我最初的想法是创建一个类来封装整个函数集,但这并不适用于应该如何使用钩子。

Typescript 在运行时不提供类型信息,因此我无法从 Type 中真正确定 name 参数,因为该信息根本不存在。但是我想知道Typescript中是否有一种方法可以表示作为参数传递的字符串与泛型函数的类型之间的这种依赖关系?

我的目标是要么只传递参数,然后自动确定类型。 Typescript 可以做到吗?

【问题讨论】:

    标签: reactjs typescript


    【解决方案1】:

    这应该很接近,唯一缺少的是删除最后的as any

    type Foo = { foo: number };
    type Bar = { bar: number };
    
    const useMyHook: (<Foo>(name: 'foo') => Foo) | (<Bar>(name: 'bar') => Bar) = (
      name: string,
    ) => {
      return (name === 'foo' ? { foo: 2 } : { bar: 3 }) as any;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-13
      • 2019-10-09
      • 2020-10-26
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      相关资源
      最近更新 更多