Javascript 联合测试<;{[id:string]:Book},string[]>;这是什么? export const getSearchResults=函数(状态$:可观察){ 返回组合测试( 州$.let(getBookEntities), state$.let(GetSearchBookId) ) .map(([entities,id])=>ids.map(id=>entities[id]); };

Javascript 联合测试<;{[id:string]:Book},string[]>;这是什么? export const getSearchResults=函数(状态$:可观察){ 返回组合测试( 州$.let(getBookEntities), state$.let(GetSearchBookId) ) .map(([entities,id])=>ids.map(id=>entities[id]); };,javascript,angular,redux,rxjs,ngrx,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 ]) => i

我需要解释的是这句话:

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

那到底是什么?我以前从未在任何地方见过它。更糟糕的是,我猜某种数组被用作属性名。另外,万一你在我头上说,有没有这个名字,我可以谷歌它做进一步的研究?它来自ngrx示例。谢谢

被称为菱形符号。这意味着函数“combineLatest”接受您在菱形中定义的泛型类型的参数

所以它的意思是“将一个具有字符串键和Book类型的值的对象作为第一个参数,并将一个字符串值数组作为第二个参数”

参数:

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

第一个参数应该是
{[id:string]:Book}
类型,第二个参数必须是
数组[]
类型

一般语法如下所示:

<{ [id: string]: Book }, string[]>
函数标识(arg:T):T{
返回arg;
}
函数标识为任何类型T,接受类型T的参数并返回T

示例用法可能如下所示:

function identity<T>(arg: T): T {
  return arg;
}
var foo=identity(“你好”);
函数标识采用string参数,因为您将其定义为string,但您可以将此函数用于在此处指定的任何类型。它的返回类型为string,只返回传递的参数“hello”

(另见)

希望这能帮助你理解


它与Java中的泛型类型相同。

这是一个TypeScript索引签名。在文档中搜索它:涉及的概念太多,无法在单个答案中为您提供全面的解释。根据您对静态类型的熟悉程度,您需要阅读有关参数化(又称泛型)的内容TypeScript中的类型和结构类型。@cartant此文档确实有帮助,但很好,因为他们给出的示例太糟糕了。
接口StringArray{[index:number]:string;}
很糟糕,因为它没有真正显示特殊的用例场景。
var foo = identity<string>("hello");