combineLatest< {[id:string]:Book},string []>这是什么?

时间:2016-11-25 21:49:21

标签: javascript angular redux rxjs ngrx

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]));
};

我需要解释的是这一行:

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

世界上到底是什么?我以前从未见过任何地方。更糟糕的是我想某种数组被用作属性名称。另外,万一你跟我说话有一个名字,所以我可以谷歌进行进一步的研究?它来自this ngrx示例。谢谢!

1 个答案:

答案 0 :(得分:2)

<{ [id: string]: Book }, string[]>是所谓的钻石符号。这意味着函数“combineLatest”接受您在钻石中定义的泛型类型的参数。

所以它意味着“将带有字符串键的对象和Book类型的值作为第一个参数作为第二个参数,取一个字符串值数组”

参数:

(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中的泛型类型相同。