2017-02-02 67 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); 
    } 
}