typescript在函数多层调用时,如何检查类型?

function x(a,b){ 
    //dosomething
}
function y(a,b){
    x(a,b);
    //dosomething
}
function z(a,b){
    y(a,b);
    //dosomething
}

应该在哪个函数写类型检查?如果要在多个函数里写类型检查,有什么范式需要遵循?

阅读 3.6k
2 个回答

其实你这样写等于没有任何强类型,因为你没有定义每个函数的a b的类型,也没有定义每个函数的返回值,最终都是any类型,这样写等于写javascript一样(跟js有区别么?)

其实你的代码等同于如下代码:

function x(a:any,b:any):any{ 
    //dosomething
}
function y(a:any,b:any):any{
    x(a,b);
    //dosomething
}
function z(a:any,b:any):any{
    y(a,b);
    //dosomething
}

你可以按照如下来体现强类型:

function x(a:number,b:number):number{ 
    //dosomething
    //报错:当前x函数要求返回number类型,但是目前返回undefined(无返回)
}
function y(a:number,b:string):number{
    return x(a,b);//报错,b类型是string,而x函数的b参数要求为number类型
}
function z(a:number,b:number):string{
    return y(a,b);//报错1,y函数返回值为number,而当前z函数返回值要求为string
    //报错2,y函数的b参数要求为string类型,而当前z函数的b为number类型
}

最后回答你的问题,多层函数调用可以实现类型检查,前提是你必须写了类型的情况下。

你function(a){},你不指定参数a的类型默认是any,所以你需要每个函数参数都指定。参数类型能有啥范式,少用any即可。