跳过未使用参数的类型检查
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
}
}
编辑:
并且如 所写,如果给定参数是 undefined
或 null
.
,则设置默认值可避免抛出错误
function parent({}={}, {}={}, {}={}) {
function child({}={}, {}={}, {}={}) {
// :-)
}
}
当我编译我的打字稿项目时,我使用了 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
}
}
编辑:
并且如 undefined
或 null
.
function parent({}={}, {}={}, {}={}) {
function child({}={}, {}={}, {}={}) {
// :-)
}
}