我对可选原始参数没有问题,但是对可选功能却没有问题。 可以说我有需要1个必需参数和1个可选参数的函数
function doSomething(value: string, callback?: () => void){
let temp = value;
callback(); // callback!() also doesn't work
}
doSomething('test') // this line throws 'callback is not a function'
答案 0 :(得分:3)
当您像这样使用帖子爆炸时:
callback!();
您正在做的是断言,在代码解释的这一点上,回调将存在,无论它是可选值。因此typescript
编译器认为您正在执行以下操作:
doSomething('test', undefined)
因为您告诉它回调将存在。
相反,您应该手动检查该值:
if(callback){
callback();
}
这应该清除所有错误
答案 1 :(得分:2)
正确的方法是检查是否提供了回调:
function doSomething(value: string, callback?: () => void){
if (callback !== undefined) {
callback();
}
}
如果这对您而言有意义,那么也可以使用默认参数。
function doSomething(value: string, callback: () => void = () => {}){
callback();
}
答案 2 :(得分:1)
尝试使用以下语法:
let t = function (a, b = () => { console.log('default') }) {
b()
}
t(1);
t(()=>{console.log('passed')})
在函数参数定义中使用=
时,不再需要?