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();
}
}