繁体   English   中英

根据function参数判断泛型function的返回类型

[英]Determine return type of generic function based on function parameter

我有一组 Typescript function,如下所示:

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

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

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

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

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

正如您可能从命名中猜到的那样,这是 React 的自定义挂钩,这增加了另一个复杂性。 我最初的想法是创建一个 class 来封装整套功能,但这并不真正适用于钩子的使用方式。

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

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

这应该很接近,唯一缺少的是最后删除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;
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM