2016-11-25 21 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[]> 

在世界上那是什麼?我從來沒有在任何地方看過它。更糟的是某種數組被用作我猜想的屬性名稱。另外,萬一你在我的頭上說話是否有這個名稱,所以我可以谷歌進行進一步的研究?它來自this ngrx示例。謝謝!

+1

這是一個打字稿指數的簽名。在文檔中進行搜索:https://www.typescriptlang.org/docs/handbook/interfaces.html – cartant

+0

有參與給你什麼是在一個單一的答案正在進行的全面解釋太多的概念。根據您對靜態類型的熟悉程度,您需要閱讀TypeScript中的參數化(又名通用)類型和結構類型。 –

+0

@cartant這個文檔確實幫了我很大的忙,但是這個例子太糟糕了。 '接口字符串數組{ [指數:號碼]:字符串; 「它很糟糕,因爲它並沒有真正顯示特殊的用例場景。 – Helzgate

回答

2

<{ [id: string]: Book }, string[]>是所謂的菱形符號。這意味着函數「combineLatest」需要您在鑽石中定義的泛型類型的參數。

因此,這意味着「取的對象與一個字符串鍵和作爲第一參數和作爲第二參數類型預訂的值,取字符串值的數組」

參數:

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

第一個參數被認爲是{ [id: string]: Book }類型的,並且所述第二參數必須是array[]類型。

一般語法,如:

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

功能身份是任何類型T的,採用類型T的參數,並返回T.

樣品使用可能看起來像:

var foo = identity<string>("hello"); 

功能身份採用串的參數,因爲你將它定義爲字符串,但你可以重複使用此功能可以指定有任何類型。它有一個字符串的返回類型,只是返回傳入的參數,即「hello」。

(另見https://www.typescriptlang.org/docs/handbook/generics.html

這有望幫助您理解。

這是一樣的泛型類型在Java中。

相關問題