跳过类型检查未使用的参数

时间:2016-08-08 17:14:21

标签: typescript unused-variables

当我编译我的打字稿项目时,我使用noImplicitAny选项,这样我就不会忘记在我的变量和参数上指定类型。

但是,有时你会有一些你不能使用的论据。例如:

jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
  return {
    abort: function (_, callback: JQueryCallback) { 

我对中止函数的第一个参数不感兴趣,所以我通过命名它来忽略它。

这是在TypeScript中这样做的正确方法吗?我无法在指南中找到它。我怀疑它不是正确的方法,因为我只能命名一个参数_。

Typescript会引发以下错误:

  

错误TS7006:参数' _'隐含地有一个“任何”的类型。

我可以输入_:any,但对于我不会使用的论据来说,这似乎有点过分。

2 个答案:

答案 0 :(得分:15)

我遇到了同样的问题。 使用say express和routing,您通常只需要res参数。

router.get('/', function (req, res) { res.end('Bye.'); });

你使用_的想法在这里起作用,但我也发现这样做也很有效。

function (_1, _2, _3, onlyThis) { console.log(onlyThis); }

这看起来更好,因为我认为只使用'_'可能会使lodash / underscore有点混乱,而且它也很明显它是你感兴趣的第四个参数。

答案 1 :(得分:8)

我可能会迟到,但我对其他解决方案感到困惑,而且这个解决方案一直都在为我工作:

function ({}={}, {}={}, {}={}, onlyThis) { console.log(onlyThis); }

比较

使用_0_1,...解决方案时,我遇到了scooped功能的困难,如:

function parent(_0, _1, _2) {
  function child(_0, _1, _2) {
    // TypeScript crying about shallowed variables
  }
}

但是空对象运行良好:

function parent({}, {}, {}) {
  function child({}, {}, {}) {
    // :-)
  }
}

即使参数输入如下:

function parent({}: number, {}: string, {}: any) {
  function child({}: number, {}: string, {}: any) {
    // :-) x2
  }
}

编辑:

如同here一样,设置默认值可避免在给定参数为undefinednull时抛出错误。

function parent({}={}, {}={}, {}={}) {
  function child({}={}, {}={}, {}={}) {
    // :-)
  }
}