33

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

然而,有时你有你不使用的论点。例如:

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

我对 abort 函数的第一个参数不感兴趣,所以我将其命名为 _ 来忽略它。

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

打字稿引发以下错误:

错误 TS7006:参数“_”隐式具有“任何”类型。

我可以只输入_:any,但对于我不使用的论点来说,这似乎有点矫枉过正。

4

2 回答 2

36

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

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

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

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

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

更新:自从我发布这个答案以来已经有很长时间了,在评论中我得到了一些错过的概念。所以虽然我会澄清。

在 Typescript 中使用下划线技巧仍然非常有用。就像我在原始答案中提到的那样,如果您使用的是 express 并且app.get('/', (req, res) => {您会收到警告'req' is declared but its value is never read,但如果您这样做 ->app.get('/', (_req, res) => {警告将消失。无论如何,您都不应该收到error TS7006: Parameter 'req' implicitly has an 'any' type.错误,因为无论如何@types/express都应该隐式键入此参数。

于 2016-09-23T12:18:10.183 回答
24

我可能迟到了,但我被其他解决方案卡住了,这个解决方案一直对我有用:

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

比较

使用_0, _1, ... 解决方案时,我遇到了诸如以下功能的问题:

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

但是对于空对象,它可以很好地工作:

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

即使参数的类型如下:

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

编辑:

并且如此处所写,undefined如果给定参数是or ,则设置默认值可避免引发错误null

function parent({}={}, {}={}, {}={}) {
  function child({}={}, {}={}, {}={}) {
    // :-)
  }
}
于 2018-05-26T23:56:56.310 回答