Typescript
typescript에서 제네릭으로 파라미터 defaultValue값 설정시
Dev갱이
2024. 1. 28. 16:50
728x90
제네릭으로 파라미터 defaultValue값을 설정 했을때 발생하는 에러
import { useState } from 'react';
import { EditMode, Union } from 'types';
export const useEditMode = <T extends Union<typeof EditMode>>(
defaultEditMode: T,
) => {
const [isMode, setMode] = useState<T>(defaultEditMode);
const handleEdit = (mode: T) => {
setMode(mode);
};
return {
isMode,
handleEdit,
};
};
// Union<typeof EditMode> 타입 추론 결과
"information" | "visitMessage" | "reset"
- 해당 useEditMode에서 제네릭 T를 이용하여 defaultEditMode라는 파라미터를 받아와서 default value값을 지정 해주고 싶었는데 아래와 같은 오류가 발생한다.
Type '"reset"' is not assignable to type 'T'.
'"reset"' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint '"information" | "visitMessage" | "reset"'
- 분명히 T를 "information" | "visitMessage" | "reset" 로 Conditional Types(조건부 타입)을 이용하여 정의 해주었음에도, 함수의 파라미터를 T라고 해주고 default value값이 무엇인지 지정 해주려고 할때 해당 에러가 발생한다.
useState에서 제네릭을 이용하여 타입을 넣어줄때 발생하는 에러
728x90