如何写[[K,V]] - >打字稿中的{K:V}

时间:2015-04-08 17:42:37

标签: typescript

是否可以做这样的事情:

fromPairs<T extends KeyValuePair<K, V>>(pairs: T[]): {[index: K]: V};

当然,K需要约束为numberstring,不知道该怎么办。

我得到的错误是:

Cannot find name

代表KV

2 个答案:

答案 0 :(得分:2)

我会这样写(带函数重载):

declare function fromPairs<V>(pairs: {key: string; value: V; }[]): {[index: string]: V};
declare function fromPairs<V>(pairs: {key: number; value: V; }[]): {[index: number]: V};

在TypeScript中使用通用的'key'类型参数通常没用 - string几乎就是你想要的。

答案 1 :(得分:1)

首先,索引参数只能是stringnumber,因此使用[index: K]是非法的。

其次,您尝试在通用约束中引用类型参数无法在TypeScript中完成,并且最终可能会出现Constraint of a type parameter cannot reference any type parameter from the same type parameter list错误。

在您的情况下,似乎不需要T类型参数,并且可以简化该功能:

function fromPairs<K, V>(pairs: KeyValuePair<K, V>[]): {[index: string]: V}

由于index参数为string(或number),K类型参数也变得毫无意义。因此,该函数可以具有以下签名:

function fromPairs<V>(pairs: KeyValuePair<any, V>[]): {[index: string]: V}