jhe*_*l17 6 dictionary typescript
当获取和设置映射值时,映射必须以某种方式知道键是否等于另一个已设置的键。
如何在 Typescript 中实现复杂数据类型(自定义类)的相等性?在Java中我会重写equals方法,打字稿中有等价的方法吗?
就我而言,我有以下课程:
export class Path {
constructor(
private readonly scope: string[],
private readonly object: string[],
private readonly value: string
) { }
getScope(): string[] {
return this.scope;
}
getObject(): string[] {
return this.object;
}
getValue(): string {
return this.value;
}
// @override equals(): boolean -- ?
}
Run Code Online (Sandbox Code Playgroud)
我想使用此类的实例作为映射中的键,如下所示:
const map = new Map<Path, string>();
map.set(new Path(['hello'], ['world'], 'asdf'), 'hwa');
map.set(new Path(['see', 'you'], ['world'], 'asdf'), 'swa');
map.get(new Path(['hello'], ['world'], 'asdf')); // 'hwa'
map.get(new Path(['see', 'you'], ['world'], 'asdf')); // 'swa'
Run Code Online (Sandbox Code Playgroud)
如何在 Typescript 中实现复杂数据类型(自定义类)的相等性?
你不能。Map是 TypeScript 从 JavaScript 获得的东西。JavaScript 规范说Map使用该SameValueZero操作来确定键是否彼此相等。对于对象实例,那就是===. 也就是说,只有同一个实例与其自身相等,而不是等值实例。它不像 Java 的集合那样遵循对象方法。
没有内置的类似映射的结构可以让您确定键相等性。您可以构建一个,但默认情况下没有一个。