我想在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
,如何在没有定义这么多功能的情况下进行类型检查?
答案 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);
}