2016-09-12 54 views
0

我想利用在RPC調用打字稿類型的檢查,但我的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

你能張貼代碼的請求和響應接口/類? – Magu

回答

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); 
}