2016-11-25 58 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中。

相关问题