isIn

agnusdei·2023년 11월 7일
0

isIn은 특정 값이 배열, 문자열 또는 객체 키에 있는지 확인하는 데 사용되는 함수입니다. 첫 번째 인자는 찾고자 하는 값이며, 두 번째 인자는 해당 값이 존재하는지 확인할 대상입니다.

예를 들어, 아래와 같이 사용할 수 있습니다.

var arr = [1, 2, 3];
console.log(isIn(2, arr));  // true

위의 예시에서, 숫자 2는 배열 arr에 포함되어 있으므로 true가 출력됩니다.

또한, isIn 함수는 문자열에서도 작동합니다.

var str = "Hello, world!";
console.log(isIn("world", str));  // true

이 예시에서, 문자열 "world"는 주어진 str 문자열 내에 존재하므로 true가 출력됩니다.

또한, 객체의 키를 검사하는 데도 사용될 수 있습니다.

var obj = {a: 1, b: 2, c: 3};
console.log(isIn("b", obj));  // true

이 예시에서, "b"라는 키는 객체 obj에 존재하므로 true가 출력됩니다.

하지만, 사용자님이 제공한 코드에서는 상당히 이상한 부분이 있습니다.

@IsIn(Object.keys('string'), {
    message: '올바르지 않은 유형이 선택되었습니다.',
})
type: string;

이 코드는 잘못된 사용 예제입니다. 'string'은 객체가 아니므로 Object.keys('string')는 빈 배열을 반환합니다. 따라서 @IsIn 데코레이터가 아무런 효과를 발휘하지 못합니다. 또한, type: string;이라는 표현도 JavaScript에서는 타입을 명시하는 방법이 아닙니다. 이 부분은 TypeScript에서 타입을 명시하는 방법일 수 있으나, @IsIn 데코레이터와 함께 사용될 경우, 해당 변수가 특정 배열 또는 문자열, 객체 키에 속하는 값으로 제한되어야 함을 나타내는 것일 수 있습니다.

따라서, 이 코드는 다음과 같이 수정해야 합니다.

var validTypes = ['string', 'number', 'boolean'];
@IsIn(validTypes, {
    message: '올바르지 않은 유형이 선택되었습니다.',
})
type: string;

위의 코드는 type 변수가 'string', 'number', 'boolean' 중 하나의 값만 가질 수 있도록 제한합니다. 만약 그렇지 않을 경우, '올바르지 않은 유형이 선택되었습니다.'라는 메시지를 출력합니다.

그러나 이런 방식의 코드는 TypeScript와 Class-validator 라이브러리에서 주로 볼 수 있는 패턴입니다. JavaScript에서는 이와 같은 형태로 사용되지 않습니다. JavaScript에서는 보통 isIn 함수를 직접 구현하거나, Lodash와 같은 유틸리티 라이브러리의 _.includes 함수를 사용하여 같은 기능을 구현합니다.

0개의 댓글