[typescript] TypeScript 해시 맵 / 사전 인터페이스

TypeScript를 처음 사용하고 해시 맵 / 사전 인터페이스를 구현하려고합니다. 지금까지

export interface IHash {
    [details: string] : string;
}

이 구문이 정확히 무엇을 의미하는지 이해하는 데 어려움이 있습니다. 내가 할 것 인 경우에 var x : IHash = {};어떻게 데이터를 액세스 / 추가 가겠어요?



답변

일반 js 객체와 마찬가지로 :

let myhash: IHash = {};

myhash["somestring"] = "value"; //set

let value = myhash["somestring"]; //get

두 가지 작업이 있습니다. [indexer: string] : string

  • 객체에 문자열 기반 키가있을 수 있음을 TypeScript에 알립니다.
  • 모든 키 항목에 대해 값은 문자열 유형이어야합니다.

여기에 이미지 설명 입력

다음을 사용하여 명시 적으로 입력 된 필드가있는 일반 사전을 만들 수 있습니다. [key: string]: any;

여기에 이미지 설명 입력

예를 들면 age해야 number하지만, name모두가 필요합니다 – 문자열이어야합니다. 암시 적 필드는 모든 유형의 값이 될 수 있습니다.

대안으로 Map클래스가 있습니다.

let map = new Map<object, string>();

let key = new Object();

map.set(key, "value");
map.get(key); // return "value"

이를 통해 숫자 / 문자열뿐만 아니라 모든 Object 인스턴스를 키로 사용할 수 있습니다.

비교적 새롭지 만 오래된 시스템을 대상으로하는 경우 폴리 필해야 할 수도 있습니다.


답변

가장 간단하고 올바른 방법은 레코드 유형 Record <string, string>을 사용하는 것입니다.

const myVar : Record<string, string> = {
   key1: 'val1',
   key2: 'val2',
}


답변

var x : IHash = {};
x['key1'] = 'value1';
x['key2'] = 'value2';

console.log(x['key1']);
// outputs value1

console.log(x['key2']);
// outputs value2

그런 다음 사전을 반복하려면 사용할 수 있습니다.

Object.keys(x).forEach((key) => {console.log(x[key])});

Object.keys는 객체의 모든 속성을 반환하므로 사전 스타일 객체의 모든 값을 반환하는 데 적합합니다.

질문에서 해시 맵을 언급했으며 위의 정의는 사전 스타일 인터페이스에 대한 것입니다. 따라서 키는 고유하지만 값은 그렇지 않습니다.

키와 해당 값에 동일한 값을 할당하여 해시 세트처럼 사용할 수 있습니다.

키가 고유하고 잠재적으로 다른 값을 갖기를 원하면 키를 추가하기 전에 객체에 키가 있는지 확인하면됩니다.

var valueToAdd = 'one';
if(!x[valueToAdd])
   x[valueToAdd] = valueToAdd;

또는 일종의 해시 세트로 작동하도록 자체 클래스를 만들 수 있습니다.

Class HashSet{
  private var keys: IHash = {};
  private var values: string[] = [];

  public Add(key: string){
    if(!keys[key]){
      values.push(key);
      keys[key] = key;
    }
  }

  public GetValues(){
    // slicing the array will return it by value so users cannot accidentally
    // start playing around with your array
    return values.slice();
  }
}


답변