【问题标题】:Properly setting TypeScript typings for anonymous functions passed to Ramda为传递给 Ramda 的匿名函数正确设置 TypeScript 类型
【发布时间】:2018-03-18 18:46:26
【问题描述】:

我正在尝试找出 Ramda 食谱方法 mapKeys 的正确类型是什么,它不会在不抛出错误的情况下进行转换。

问题

fn 出现错误:

'{}' 类型的参数不能分配给 '(a: 字符串)=> 字符串'。类型“{}”不匹配签名“(a: 字符串):字符串'。

我可以从R.adjust 的类型中看到它使用泛型,我根据错误尝试了(a: string) => string,这应该是正确的类型,以及其他几个变体,例如(a: string) => string[]

有人能指出匿名函数的fn 参数应该是什么来修复打字错误吗?

这真的很容易复制,只需使用 VSCode 将示例粘贴到 TypeScript 项目中并通过 npm 安装 Ramda,我将 R.adjust 的类型作为参考。

示例

import * as R from 'ramda';

export const mapKeys = R.curry(
  (fn: ???, obj: { [k: string]: any } | { [k: number]: any }) =>
    R.fromPairs(
      R.map(
        R.adjust(fn, 0), // <--- Error: tried typings for `adjust`
        R.toPairs(obj)
      )
    )
);

Ramda 类型供参考

adjust<T>(fn: (a: T) => T, index: number, list: T[]): T[];
adjust<T>(fn: (a: T) => T, index: number): (list: T[]) => T[];

【问题讨论】:

  • 我不知道打字稿。但是该函数应该具有接受单个字符串并返回字符串的类型。
  • 我猜它理论上可以具有与toPairs 相同的String || Number 类型,尤其是在返回时,但这可能是矫枉过正。 (谁会那样使用它?)
  • @ScottSauyet 是的,当我看到错误时我也是这么想的,但我已经尝试了错误消息 (a: string) =&gt; stringstring 中提供的内容。我认为这可能是 adjust 类型的问题......因为 Ramda 食谱 renameBy 中使用 adjust 的另一种方法也有同样的问题
  • 恐怕我出局了。没有关于 TS 如何真正运作的想法。但祝你好运。

标签: typescript typescript-typings ramda.js


【解决方案1】:

我在Github 上为types/npm-ramda 发布了一个问题,fix 被合并到主版本中,用于下一版本的 Ramda 分型。

【讨论】:

    猜你喜欢
    • 2021-04-27
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多