如何省略作为参数的可选功能

时间:2019-01-20 19:44:11

标签: typescript

我对可选原始参数没有问题,但是对可选功能却没有问题。 可以说我有需要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'

3 个答案:

答案 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')})

在函数参数定义中使用=时,不再需要?