add edge 方法抛出这个错误。我不知道在这种情况下什么是永远!
TS2345:'string 类型的参数 | number' 不能分配给类型为 'never' 的参数。
.map_err(Into::into)
谢谢
答案 0 :(得分:1)
问题在于你的类型
{ [key in string | number]: string[] | number[] }
表示每个键映射到 string[]
或 number[]
,但没有说明它是哪个。因此,当您尝试推送一个键时,TypeScript 无法知道该键是适合数组的类型。例如,对于所有 TypeScript 所知,键可以是 string
,但数组是 number[]
...
(当然,错误信息可能更清楚......)
您可以通过不同方式解决此问题。如果每个图都处理字符串或数字,但通常不是两者都处理,则可以使用泛型:
export class Graph<V extends string | number> {
adjacencyList: { [key in V]?: V[] } = {};
addVertex(vertex: V): void {
this.adjacencyList[vertex] = [];
}
addEdge(vertex1: V, vertex2: V): void {
this.adjacencyList[vertex1].push(vertex2);
this.adjacencyList[vertex2].push(vertex1);
}
}
(编译器仍然对你大喊大叫,因为可能在顶点之前添加了边,导致缺少数组。你可能想要更优雅地处理)
或者,如果您的图表通常包含数字和字符串的任何混合,您可以这样做:
export class Graph {
adjacencyList: { [key in number | string]: (number | string)[] } = {};
addVertex(vertex: number | string): void {
this.adjacencyList[vertex] = [];
}
addEdge(vertex1: number | string, vertex2: number | string): void {
this.adjacencyList[vertex1].push(vertex2);
this.adjacencyList[vertex2].push(vertex1);
}
}
相关的变化是顶点的 adjacencyList
是 (number | string)[]
类型,即一个可以包含字符串和数字混合的数组。