当我编译我的打字稿项目时,我使用noImplicitAny
选项,这样我就不会忘记在我的变量和参数上指定类型。
但是,有时你会有一些你不能使用的论据。例如:
jQuery.ajaxTransport("+*", function (options: JQueryAjaxSettings) {
return {
abort: function (_, callback: JQueryCallback) {
我对中止函数的第一个参数不感兴趣,所以我通过命名它来忽略它。
这是在TypeScript中这样做的正确方法吗?我无法在指南中找到它。我怀疑它不是正确的方法,因为我只能命名一个参数_。
Typescript会引发以下错误:
错误TS7006:参数' _'隐含地有一个“任何”的类型。
我可以输入_:any
,但对于我不会使用的论据来说,这似乎有点过分。
答案 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一样,设置默认值可避免在给定参数为undefined
或null
时抛出错误。
function parent({}={}, {}={}, {}={}) {
function child({}={}, {}={}, {}={}) {
// :-)
}
}