programing

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

topblog 2023. 3. 14. 21:22
반응형

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"

이것에 의해, 키로서 임의의 오브젝트인스턴스(숫자/문자열 뿐만이 아니라)를 설정할 수 있습니다.

비교적 새로운 시스템이기 때문에 오래된 시스템을 대상으로 할 경우 폴리필이 필요할 수 있습니다.

가장 간단하고 올바른 방법은 Record type 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();
  }
}

언급URL : https://stackoverflow.com/questions/42211175/typescript-hashmap-dictionary-interface

반응형