打字稿返回类型推断

不正常

在以下代码片段中,typescript 能够正确推断返回类型:


{
  type IOFunction< OUTPUT> = (input: number) => OUTPUT

  function createIOFunction<OUTPUT>(input: number, converter: IOFunction<OUTPUT>): OUTPUT {
    return converter(input)
  }

  const x = createIOFunction(12, num => num + '!')
  // x is of type 'string'. Typescript was able to infer the OUTPUT type correctly AND without me specifying what the output type should be

  const y = createIOFunction(24, num => num * 2)
  // y is of type 'number'
}

我怎样才能通过以下构造实现这一目标?


{
  type IOFunction<INPUT> = (input: INPUT) => any /* <-- What goes here ?? */
  // I don't want the type to be IOFunction<INPUT, OUTPUT> = (input: INPUT) => OUTPUT

  const convert: IOFunction<number> = num => num + '!'
  const x = convert(12)
  // x is of type any, not string
  // how can x be inferred? 
}

这是一个更复杂的例子(根据要求):


  interface STATE {
    value: number
  }

  const myState: STATE = {
    value: 12
  } 

  type FAC_FUNCTION<S> = (state: S) => any


  const factory: FAC_FUNCTION<STATE> = state => (
    {
      hello() { 
        return 'Hello ' + state.value;
      }
    })

  const toolbox = factory(myState)
  // toolbox.hello() <!--- not typed :(




  type FACTORY_FUNCTION<S, OUTPUT> = (state:S) => OUTPUT

  function bindFactory<S, OUTPUT>(state:S, fac: FACTORY_FUNCTION<S, OUTPUT>) {
    return fac(state)
  }

  const toolbox2 = bindFactory(myState, state => ({
    hello() {
      return 'Hello ' + state.value
    }
  }))

  toolbox2.hello() // typed :)

工具箱没有输入,toolbox2 是。我想将状态绑定到特定功能。最后我不想用户写类似const toolbox = bindFactory(state, factory).

对不起,但这是我想出的最好的复杂例子

不正常

好的,我想出了一个方法 - 它实际上非常简单。您只需要提供输入参数的类型定义,然后让编译器找出其余部分。

所以代替

  type FAC_FUNCTION<S> = (state: S) => any

  const factory: FAC_FUNCTION<STATE> = state => (
    {
      hello() { 
        return 'Hello ' + state.value;
      }
    })

  const toolbox = factory(myState)

用:

  const factory = (state:PROPS) => (
    {
      hello() { 
        return 'Hello ' + state.value;
      }
    })

  const toolbox = factory(myState)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

打字稿联合类型推断

来自分类Dev

打字稿无法推断通用类型

来自分类Dev

打字稿推断的类型不能使用

来自分类Dev

打字稿吸气剂类型推断

来自分类Dev

打字稿部分类型推断

来自分类Dev

打字稿和类型推断:验证问题

来自分类Dev

使用打字稿推断类型的问题

来自分类Dev

打字稿:通用类类型推断

来自分类Dev

为什么在使用区分类型检查时无法打字稿推断出返回类型

来自分类Dev

是否可以推断打字稿中映射类型的函数的返回类型?

来自分类Dev

在打字稿中返回“ payload is T”时如何推断正确的类型?

来自分类Dev

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

来自分类Dev

打字稿-返回类型条件

来自分类Dev

打字稿推断联合类型而不是指定的类型

来自分类Dev

在打字稿中使用扩展类型进行类型推断

来自分类Dev

打字稿推断问题

来自分类Dev

打字稿:使用装饰器时的类型推断

来自分类Dev

打字稿:参数顺序会影响类型推断吗?

来自分类Dev

推断打字稿中嵌套的泛型类型?

来自分类Dev

为什么打字稿功能参数类型推断失败?

来自分类Dev

为什么打字稿不能推断表达类型

来自分类Dev

必须定义打字稿类型推断不能识别值

来自分类Dev

打字稿中的函数重载和类型推断

来自分类Dev

打字稿:是否可以从参数值推断返回值?

来自分类Dev

类函数打字稿的返回类型

来自分类Dev

打字稿从模块中提取返回类型

来自分类Dev

打字稿中的联合返回类型

来自分类Dev

打字稿。数组返回参数类型

来自分类Dev

打字稿映射对象返回类型