【问题标题】:How to resolve this TypeScript error: "Expected 0-1 arguments, but got 2"如何解决此 TypeScript 错误:“预期 0-1 个参数,但得到 2 个”
【发布时间】:2018-12-27 02:33:51
【问题描述】:

我正在用 JavaScript(不是 TypeScript)编写 Node.js 代码,但使用 TypeScript 静态分析工具来检查我的 JavaScript。

我有以下使用 stampit 库的 JavaScript 代码:

import stampit from 'stampit'

const Character = stampit({
  props: {
    name: null,
    health: 100
  },
  init({ name = this.name }) {
    this.name = name
  }
})

const Fighter = stampit(Character, { // inheriting
  props: {
    stamina: 100
  },
  init({ stamina = this.stamina }) {
    this.stamina = stamina;    
  },
  methods: {
    fight() {
      console.log(`${this.name} takes a mighty swing!`)
      this.stamina--
    }
  }
})

我已经安装了DefinatelyType package for stampit

但是,我收到以下错误,它适用于整个 stampit(Character, {...}) 函数调用:

Expected 0-1 arguments, but got 2

任何想法如何解决此错误?甚至只是使用 TypeScript 将其关闭?

【问题讨论】:

  • " 即使只是使用 TypeScript 将其关闭" -> 使用 //@ts-ignore 忽略它?

标签: javascript typescript typescript-typings lint


【解决方案1】:

更新:这似乎是@types/stampit 中的一个错误。它可以与 TypeScript 一起使用而不会出现问题,但在编写 JS 代码时会出现问题。可以通过将stampit 声明更改为:

declare function stampit(f1?: stampit.Stamp | Options, options?: Options): stampit.Stamp;

类型定义are for stampit v3.0.x,其最新版本是3.0.6 two years ago,因此(假设您刚刚安装了 stampit v4.1.2)定义与代码和文档不同步。您的选择是:

  1. (强烈建议不要使用)使用 stampit v3.0.6 (npm i -S stampit@3.0.6)
  2. 为 stampit v4.1.2 编写更新的类型定义(并希望创建针对 DefinitiveTyped 存储库的拉取请求)
  3. 如 vibhor1997a 所说,在出现错误的任何地方添加 //@ts-ignore
  4. 明确将库视为无类型:const stampit: any = require("stampit");

#2 显然是最好的,因为它也有利于其他任何想要使用该库的人。如果您没有时间或意愿这样做,我建议不要使用#3,因为它容易出错且乏味。剩下的 #4 至少会迫使您保持明确和警惕。

【讨论】:

  • 感谢您的详细评论。我尝试了建议 1) 和 2),但它们不起作用(看起来 @types/stampit 是活动开发的)。但是,我看到@types/stampit 存在问题。我现在已经更改了.d.ts 文件。我希望将其提交给 repo,或在某个阶段提出问题。我的更改是declare function stampit(f?: stampit.Stamp | Options, options?: Options): stampit.Stamp;
猜你喜欢
  • 2022-01-24
  • 2021-03-13
  • 2018-05-19
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 2021-07-29
相关资源
最近更新 更多