[javascript] 맵의 키값과 셋의 값의 데이터 타입 제한

일반적으로, 맵은 모든 유형의 값에 대해 키를 저장할 수 있습니다. 하지만 때로는 특정한 데이터 타입으로 제한하고 싶을 때가 있습니다. 예를 들어, 키 값으로 문자열만을 허용하고 싶은 경우가 있을 수 있습니다. 이때 맵을 생성할 때 특정한 제네릭을 사용하여 키의 데이터 타입을 제한할 수 있습니다.

// 문자열만 허용하는 맵 생성
let stringKeyMap = new Map<string, any>();
stringKeyMap.set('name', 'John');
stringKeyMap.set(1, 'One'); // 에러: 숫자는 키로 허용되지 않습니다

위의 코드에서 Map<string, any>()는 문자열만을 키로 허용하는 맵을 생성합니다. 이제 숫자나 기타 데이터 타입이 키로 사용되면 타입 에러가 발생합니다.

셋의 경우에는 이미 값들이 고유한 것으로 저장되기 때문에 추가적인 데이터 타입 제한을 걸지는 않습니다. 하지만 만약 특정한 데이터 타입의 값만을 허용하도록 제한하려면 다른 방법을 사용해야 합니다.

예를 들어, 숫자만을 포함하는 셋을 생성하고 싶다면 다음과 같이 필터링 함수를 사용하여 원하는 데이터만 추가할 수 있습니다.

let numberSet = new Set();
function addNumber(value: any) {
    if (typeof value === 'number') {
        numberSet.add(value);
    }
}

addNumber(1);
addNumber('2'); // 에러: 숫자가 아닌 값은 허용되지 않습니다

이렇게 특정한 데이터 타입을 맵의 키값이나 셋의 값으로 제한하려면, 제네릭을 사용하거나 데이터를 추가할 때 필터링 함수를 사용하여 제한을 두면 됩니다.