2016-11-25 9 views
1
export const getSearchResults = function (state$: Observable<State>) { 
return combineLatest<{ [id: string]: Book }, string[]>(
    state$.let(getBookEntities), 
    state$.let(getSearchBookIds) 
) 
.map(([ entities, ids ]) => ids.map(id => entities[id])); 
}; 

はこの行です:combineLatest <{[id:string]:Book}、string []>これはなんですか?私が説明した必要なもの

<{ [id: string]: Book }, string[]> 

それは世界で何ですか?私は文字通りどこにも見たことがありません。さらに悪いのは、ある種の配列が私が推測するプロパティ名として使用されていることです。また、私の頭の上で話す場合には、この名前があるので、私はGoogleにそれ以上の調査をさせることができますか?それはthis ngrxの例です。ありがとう!

+1

これはTypeScriptのインデックスシグネチャです。ドキュメントで検索してください:https://www.typescriptlang.org/docs/handbook/interfaces.html – cartant

+0

1つの答えで何が起こっているのかを包括的に説明するには、あまりにも多くの概念が必要です。静的型付けにどの程度慣れているかに応じて、パラメータ化された(別名汎用型)型と型式の構造型について読む必要があります。 –

+0

@cartantこの文書は助けになりましたが、その例はとても悪いものです。 'interface StringArray { [index:number]:文字列です。 } '実際には特別なユースケースのシナリオを示していないので、悪いです。 – Helzgate

答えて

2

<{ [id: string]: Book }, string[]>は、ダイヤモンド表記と呼ばれます。これは、関数 "combineLatest"がダイヤモンド内で定義するジェネリック型の引数を取ることを意味します。

だからパラメータ「最初のパラメータとして、2番目のパラメータとして、キー文字列を持つオブジェクトとタイプブックの値をとり、文字列値の配列をとる」

意味:

(state$.let(getBookEntities),state$.let(getSearchBookIds)

最初のパラメータは{ [id: string]: Book }とし、2番目のパラメータはarray[]である必要があります。

function identity<T>(arg: T): T { 
    return arg; 
} 

機能のアイデンティティがどのようなタイプのTであるが、型Tの引数を取り、返しT.

サンプルの使用量は、そのようになります

よう

一般的な構文は次のとおりです。

function identityは文字列であると定義されているためstringのパラメータをとりますが、そこで指定したすべての型に対してこの関数を再利用できます。それは文字列の戻り値の型を持ち、単に渡された引数 "hello"を返します。

(またhttps://www.typescriptlang.org/docs/handbook/generics.htmlを参照)

これがうまくいけば、あなたの理解を助けました。

Javaのジェネリック型と同じです。

関連する問題