【问题标题】:JSDoc typings for typescript for JavaScript reducer accumulator用于 JavaScript 减速器累加器的打字稿的 JSDoc 类型
【发布时间】:2019-02-08 16:01:39
【问题描述】:

我正在尝试使用 JSDocs 在 JavaScript reducer 中键入累加器,但不知道如何执行此操作。

我尝试在初始化时内联输入它,但没有奏效。任何提示或想法?这是示例代码。它抱怨传递给 arr.push() 的参数:

/**
* @type {Array<String>}
*/
const arr = ['one', 'two', 'three'];

/**
 * @type {Array<Array>}
 */
const result = arr.reduce((acc, item) => {
   if(item.length % 3 === 0) {
     // [ts] Argument of type '(string | number)[]' is not assignable to
     // parameter of type 'never'.
     acc.push([item, item.length]);
   }
   return acc;
}, []);

这是 GitHub 存储库,它在项目的根目录中包含用于 tsc 设置的 tsconfig.json 文件:https://github.com/guyellis/typescript-as-a-linter

这是我从中获取上述代码的那个 repo 中的文件:https://github.com/guyellis/typescript-as-a-linter/blob/master/lib/reducer.js

【问题讨论】:

  • 顺便说一句,你为什么使用reduce 而不是map 的工作? const result = arr.map(item =&gt; [item, item.length]);.
  • @ibrahimmahrir - 好问题。这是一个非常糟糕的例子!我应该提供一个示例来生成更大或更小的数组,而不是应该使用map()
  • 我编辑了问题以使示例更加真实。

标签: javascript typescript jsdoc


【解决方案1】:

作为初始状态传递的空数组的类型为never[]。有关更多背景信息,请参阅this thread。为了避免这种情况,你可以把它放在一个常量中并给常量一个类型:

/**
* @type {Array<String>}
*/
const arr = ['one', 'two', 'three'];

/** @type {Array<[string, number]>} */
const init = [];

/**
 * @type {Array<[string, number]>}
 */
const result = arr.reduce((acc, item) => {
   acc.push([item, item.length]);
   return acc;
}, init);

【讨论】:

  • 谢谢@matt-mccutchen - 如果没有其他人想出一种方法来键入此内联或其他方式而不添加显式声明的初始化程序,那么我将在几个中将其标记为已接受的答案天。
【解决方案2】:
/**
 * @param {Pose['parameterValues']} values
 * @param {Pose['variants']} variants
*/
function getSrc (values, variants) {
  return values.reduce(
    /** @param {{[key: string]:Array<string>}} paths */
    (paths, { camera, light }, index) => {
      paths[light.name] = []
      for (let c = camera.start; c < camera.end; c += camera.increment) {
        paths[light.name].push(
          variants[index].replace('light', light.value).replace('camera', String(c))
        )
      }
      return paths
    }, {})
}

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    • 2020-04-20
    • 2021-12-21
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多