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
'programing' 카테고리의 다른 글
React에서 기능이 두 번 호출되는 이유는 무엇입니까? (0) | 2023.03.14 |
---|---|
iOS 디바이스의 Safari에서 손상된 이미지를 로드하고 있습니다(Wordpress 사이트). (0) | 2023.03.14 |
구체적으로 어떤 JS 엔진에서 Lower Case 및 To Upper Case 로케일에 민감합니까? (0) | 2023.03.14 |
리액트 라우터에서 브라우저의 뒤로 버튼을 가로채거나 처리합니까? (0) | 2023.03.14 |
리액트 네이티브번들링 실패오류 메시지: "모듈 'idb' 해결 중.....실제로 이러한 파일은 존재하지 않습니다. (0) | 2023.03.14 |