如何通过打字稿检查类型参数?

时间:2016-09-12 03:08:39

标签: typescript

我想在rpc调用中使用typescript类型检查,但我的rpc调用是这样的:

return await dataCaller.callWebService(apiId,req);

所以对于很多rpc调用,我必须这样定义:

// get_by_product.ts
async function get_by_product(req:DataCenter.o2o.shipment_fare.get_by_product.Request):Promise<DataCenter.o2o.shipment_fare.get_by_product.Response>{
return await dataCaller.callWebService("o2o.shipment_fare.get_by_product",req);
}

// check_by_order.ts
async function check_by_order(req:DataCenter.o2o.shipment_fare.check_by_order.Request):Promise<DataCenter.o2o.shipment_fare.check_by_order.Response>{
return await dataCaller.callWebService("o2o.shipment_fare.check_by_order",req);
}

// check_by_cart.ts
async function check_by_cart(req:DataCenter.o2o.shipment_fare.check_by_cart.Request):Promise<DataCenter.o2o.shipment_fare.check_by_cart.Response>{
return await dataCaller.callWebService("o2o.shipment_fare.check_by_cart",req);
}

然后我可以通过类型检查调用get_by_product如何在没有定义这么多功能的情况下进行类型检查?

1 个答案:

答案 0 :(得分:0)

您可以使用union types

function strOrNum(a: number): string | number {
    if(a > 0) {
        return a;
    }
    return "Negative";
}

也在泛型中:

interface IObj<T> {
    value: T;
}

function strOrNum(a: number): IObj<string | number> {
    if(a > 0) {
        return { value: a };
    }
    return { value: "Negative" };
}

在你的情况下:

async function get_by_product(req:DataCenter.o2o.shipment_fare.get_by_product.Request): Promise<DataCenter.o2o.shipment_fare.get_by_product.Response | DataCenter.o2o.shipment_fare.check_by_order.Response | DataCenter.o2o.shipment_fare.check_by_cart.Response> {
    return await dataCaller.callWebService("o2o.shipment_fare.get_by_product",req);
}