问题
When I compile my typescript project, I'm using the noImplicitAny
option so that I won't forget to specify the types on my variables and arguments.
However sometimes you have arguments that you don't use. For example:
jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
return {
abort: function (_, callback: JQueryCallback) {
I am not interested in the first argument of the abort function, so I ignore it by naming it _.
Is that the proper way to do that in TypeScript? I couldn't find it in the guide. I suspect that it isn't the proper way, because I can only name one argument _.
Typescript raises the following error:
error TS7006: Parameter '_' implicitly has an 'any' type.
I could just type _:any
but that seems a bit overkill for an argument that I don't use.
回答1:
I was having the same problem. Using say express and routing you would often only want the res parameter.
router.get('/', function (req, res) { res.end('Bye.'); });
Your idea of using _ works here, but I've also found doing this works too.
function (_1, _2, _3, onlyThis) { console.log(onlyThis); }
This seems better, as only doing '_' I think might make using lodash/underscore a bit confusing, and it also makes it obvious it's the 4th parameter your interested in.
回答2:
I may be late, but I got stuck with the other solutions and this one work all the time for me:
function ({}={}, {}={}, {}={}, onlyThis) { console.log(onlyThis); }
comparison
When using the _0
, _1
, ... solution, I faced difficulties with scooped function like:
function parent(_0, _1, _2) {
function child(_0, _1, _2) {
// TypeScript crying about shallowed variables
}
}
but with the empty object it work well:
function parent({}, {}, {}) {
function child({}, {}, {}) {
// :-)
}
}
Even if the parameters are typed like:
function parent({}: number, {}: string, {}: any) {
function child({}: number, {}: string, {}: any) {
// :-) x2
}
}
EDIT:
And as written here, setting a default value avoid error throwing if the given parameter is undefined
or null
.
function parent({}={}, {}={}, {}={}) {
function child({}={}, {}={}, {}={}) {
// :-)
}
}
来源:https://stackoverflow.com/questions/38835001/skip-type-check-on-unused-parameters