您好,我在Angular2和Typescript上編寫應用程序,併爲get事件創建服務。我猜我的函數返回數組事件,當我不在函數中傳遞參數和有參數時返回對象。typescript返回對象或數組錯誤
但在我的組件lintner顯示此結構的錯誤。
this.event.length
類型「事件|事件[]'不可分配爲鍵入'Event []'。類型 「事件」不可分配給「事件[]」類型。 「事件」類型中缺少屬性「長度」。
我能抓住這個錯誤嗎?因爲我知道在這個組件中獲得什麼
您好,我在Angular2和Typescript上編寫應用程序,併爲get事件創建服務。我猜我的函數返回數組事件,當我不在函數中傳遞參數和有參數時返回對象。typescript返回對象或數組錯誤
但在我的組件lintner顯示此結構的錯誤。
this.event.length
類型「事件|事件[]'不可分配爲鍵入'Event []'。類型 「事件」不可分配給「事件[]」類型。 「事件」類型中缺少屬性「長度」。
我能抓住這個錯誤嗎?因爲我知道在這個組件中獲得什麼
您可以使用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
錯誤消息是不言自明的:一個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);
}
}
您的某些服務代碼有助於解決此問題。 – cyrix
@cyrix我解決了這個問題。當我執行我的函數並訂閱結果時,我使用'this.events = result作爲事件[]',並且如果帶參數的執行函數我'this.event = result as Event' –