2017-02-02 2 views
0

こんにちは、私はAngular2とTypescriptでアプリケーションを作成し、getイベントのサービスを作成します。関数で引数を渡さず、引数をとったときにObjectを返すとき、私の関数が配列のイベントを返すものと思います。typescript戻り値オブジェクトまたは配列エラー

しかし、この構成では、lintnerのエラーが表示されます。

this.event.length

タイプ「イベント|イベント[] 'はタイプ'イベント[] 'に割り当てられません。タイプ 'イベント'はタイプ 'イベント[]'に割り当てられません。 プロパティ 'length'がタイプ 'Event'にありません。

このエラーはありますか?このコンポーネントの何がイベントの配列を取得するのかを知っているから

+2

これを解決するコードがいくつかあります。 – cyrix

+0

@cyrix私はこの問題を解決しました。関数を実行して結果を購読すると、this.events = resultをEvent []として使用し、引数iで関数を実行すると '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); 
    } 
} 
関連する問題