您好,我在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' –