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示例。谢谢!
答案 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中的泛型类型相同。