-
Notifications
You must be signed in to change notification settings - Fork 5
나만의 type Validator 함수 만들기
문건우 edited this page Dec 3, 2020
·
3 revisions
TypeScript가 type을 확인 해주지만 http 통신에서의 전달 값들까지 다 확인해주지는 못 한다.
그래서 값들이 제대로 된 값들이 들어왔는지 확인 하기 위해서 type validator 함수를 만들었다.
ValidateType enum은 우리가 확인할 type들을 넣어두었다. 이러한 타입들을 검사할 것이라고 정의 해놓은 것이다.
isValidateType 함수는 첫번째 인자로 어떤 값을 검사할 것인지 하는 target 파라미터, 어떤 값이길 희망하는지 받는 type 파라미터, 더 검사해주길 원하는 콜백함수로 이루어진다.
Null의 경우는 typeof를 사용할시 object로 나온다. 그래서 ≠= null을 사용하여 검사하였다.
Number일 경우는 Number.isFinite를 사용하여 유한한 숫자인지를 검사해주었다.
Array일 경우에는 Array.isArray를 활용하여 확인하였다.
Object, String, Boolean, Undefined는 모두 typeof를 했을 때 type과 같은지를 검사해주었다.
그리고 callback이 있을 경우에는 callback까지 통과를 해야 true를 반환해주게 만들었다.
// enum으로 내가 지정해놓은 값만 적을 수 있게 함.
export enum ValidateType {
Number = 'number',
String = 'string',
Object = 'object',
Array = 'array',
Boolean = 'boolean',
Undefined = 'undefined',
Null = 'null',
}
// target이 type에 맞는지 확인하고, callback이 있다면 callback에 들어 맞는지도 확인
export function isValidateType<T>(
target: T,
type: ValidateType,
callback?: (target: T) => boolean
): boolean {
if (type === ValidateType.Null && target !== null) {
return false;
}
if (type === ValidateType.Number && !Number.isFinite(Number(target))) {
return false;
}
if (type === ValidateType.Array && !Array.isArray(target)) return false;
if (
(type === ValidateType.Object ||
type === ValidateType.String ||
type === ValidateType.Boolean ||
type === ValidateType.Undefined) &&
typeof target !== type
)
return false;
if (callback && !callback(target)) return false;
return true;
}
console.log(isValidateType({test: 1, index: 2}, ValidateType.Object, (target) => {
if(target.test && target.index && target.aa) return true;
return false;
}));