复杂类型推断。非常确定在TS中是可能的,但是

时间:2019-07-06 09:56:27

标签: typescript types typescript-typings typescript-generics

遇到了一个我无法真正解决的非常有趣的问题。

我想创建一个接受函数对象的函数,并返回具有相同键但返回类型不同的对象(返回类型取决于参数的值。

例如:

declare function add(a: number, b: number): number
declare function str(a: string, b: string): string

declare function createObject(obj)

const result = createObject({
   addFn: add,
   strFn: str
}) 

/*
   result's TYPE should equal:
   {
      addFn: [number, (a: number, b: number) => number],
      strFn: [string, (a: string, b: string) => string]
   }
*/

我认为这似乎可以解决,但我不确定如何解决。我最接近我的分辨率的是以下几行:

type GenericHashTable<T> = { [key in keyof T]: T[key] };

function createAPI<T extends { [k: string]: any }>(fetchers: T) {
  const obj: GenericHashTable<T> = fetchers;
  return obj;
}

但是此decl不会让我正确更改返回类型。

1 个答案:

答案 0 :(得分:1)

看起来您只需要预定义的findOne条件类型:

ReturnType