我有自定义接口类型:
export interface IDictionary {
id: number;
dbVersion: number;
code: string;
tableName: string;
name: Name;
shortName: ShortName;
active: boolean;
restricted: boolean;
hierarchy: boolean;
metadata: string;
rights: any[];
}
我尝试构建 Map():
dataMap = new Map<IDictionary, IDictionary[]>([
[{ name: { ru: "Root1"}} as IDictionary, [{ name: { ru: "Papa"}} as IDictionary]]
]);
可以key
用作IDictionary
类型吗?
然后我尝试通过键获取值:
this.dataMap.get(node);
节点是对象的地方:
{ name: { ru: "Root1"}}
我应该得到: [{ name: { ru: "Papa"}}]
在 JavaScript(以及作为扩展,TypeScript)中,没有两个对象是相等的,除非它们引用同一个对象。如果您创建一个新对象,它不会认为它与任何现有对象相等。
因为 Maps 在查找元素时考虑了这种相等性,如果您存储一个以对象为键的值,则只有再次将完全相同的对象引用作为键传入,才能再次获取该值:
interface Name {
ru: string
}
interface ShortName extends Name {}
interface IDictionary {
id?: number;
dbVersion?: number;
code?: string;
tableName?: string;
name: Name;
shortName?: ShortName;
active?: boolean;
restricted?: boolean;
hierarchy?: boolean;
metadata?: string;
rights?: any[];
}
const node = { name: { ru: 'Root1' } }
const dataMap = new Map<IDictionary, IDictionary[]>([[
node, [{ name: { ru: 'Papa' } }]
]])
console.log(dataMap.get({ name: { ru: 'Root1' } })) // undefined
console.log(dataMap.get(node)) // [ { name: { ru: 'Papa' } } ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句