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

Skip type check on unused parameters

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

然而,有时您会有不使用的参数。例如:

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

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

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

Typescript 引发以下错误:

error TS7006: Parameter '_' implicitly has an 'any' type.

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

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

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

您使用 _ 的想法在这里行得通,但我也发现这样做也行得通。

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

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

Update: It's been a long time since I posted this answer, and in the comments I'm getting a few miss conceptions. So though I would clarify.

使用下划线技巧在 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 无论如何都应该隐式输入这个参数。

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

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

比较

当使用 _0, _1, ... 解决方案时,我遇到了 scooped 函数的困难,例如:

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
  }
}

编辑:

并且如 所写,如果给定参数是 undefinednull.

,则设置默认值可避免抛出错误
function parent({}={}, {}={}, {}={}) {
  function child({}={}, {}={}, {}={}) {
    // :-)
  }
}