как объявить и создать словарь с объектом в качестве ключа

Я пытаюсь создать словарь машинописного текста, ключ которого является объектом с двумя свойствами:

Я пытался использовать интерфейс для ключа:

 /*
export interface IMyDictionary<TValue>
{
  [{ property1 : string, property2: number}] : TValue  //or 
  [IMyDictionaryKey] : TValue // none of them works
}
*/
export interface IMyDictionaryKey
{
   property1 : string;
   property2 : number
}

export class MyDictionaryKey implements IMyDictionaryKey
{
    property1 : string;
    property2 : number;
    constructor(prop1: string, prop2 : number)
    {
       property1 = prop1;
       property2 : prop2;
    }
}

в самом компоненте я хотел бы сделать что-то вроде:

Mydictionary : IMyDictionary<number[]>; //OR 
Mydictionary : {} = {};

и установить новые элементы ключ-значение:

this.Mydictionary[new MyDictionaryKey("AAAA", 1) as IMyDictionaryKey] = [];

а затем вставьте массив значений в качестве значения для этого ключа:

this.Mydictionary[{ property1: "AAAA", property2: 1}] = [1,2,3,4];

person Guy E    schedule 21.01.2020    source источник
comment
Имена свойств объекта могут быть строками только в Javascript, а также в Typescript.   -  person RemcoGerlich    schedule 21.01.2020
comment
@RemcoGerlich также может быть числом, а {1: 1} является допустимым объектом   -  person Juraj Kocan    schedule 21.01.2020
comment
@JurajKocan: Только потому, что JS переводит число в строку, x = {1: A, 1: B} делает x объектом с 1 элементом.   -  person RemcoGerlich    schedule 21.01.2020
comment
@RemcoGerlich x = {1: A, 1: B} превращает x в {1: B}... я не хочу с вами спорить, просто ради интереса   -  person Juraj Kocan    schedule 22.01.2020


Ответы (1)


Вместо использования простого объекта JavaScript в качестве словаря используйте Карту. Map может использовать любой объект в качестве ключа: new Map<IMyDictionaryKey, any>. В частности, существует WeakMap, который фокусируется на использовании объектов в качестве ключей.

person iY1NQ    schedule 21.01.2020