2017-02-02 66 views
0

您好,我在Angular2和Typescript上編寫應用程序,併爲get事件創建服務。我猜我的函數返回數組事件,當我不在函數中傳遞參數和有參數時返回對象。typescript返回對象或數組錯誤

但在我的組件lintner顯示此結構的錯誤。

this.event.length

類型「事件|事件[]'不可分配爲鍵入'Event []'。類型 「事件」不可分配給「事件[]」類型。 「事件」類型中缺少屬性「長度」。

我能抓住這個錯誤嗎?因爲我知道在這個組件中獲得什麼

+2

您的某些服務代碼有助於解決此問題。 – cyrix

+0

@cyrix我解決了這個問題。當我執行我的函數並訂閱結果時,我使用'this.events = result作爲事件[]',並且如果帶參數的執行函數我'this.event = result as Event' –

回答

1

您可以使用overloads。舉個例子:

type MyEvent = { evtName: string } 
function abc(): MyEvent[] 
function abc(param): MyEvent 
function abc(param?): any { 
    // do the stuff 
} 

abc().length // ok 
abc()[0].evtName // ok 
abc("def").evtName // ok 
1

錯誤消息是不言自明的:一個Element | Element[]不是Element[](相反的是真實的,但不是你在做什麼)。您可以使用type guard縮小工會類型的範圍:

function isElement(value: Element | Element[]) value is Element { 
    return value instanceof Element; 
} 

function functionWithReturn(): Element | Element[] { 
    //Do something 
} 

function functionWithParameter(value: Element[]) { 
    //Do something 
} 

function doWork() { 
    let value = functionWithReturn(); 
    if (!isElement(value)) { 
     functionWithParameter(value); 
    } 
}