이처럼 타입 매개변수와 제약의 관계에서는 타입 매개변수와 제약을 동일하게 생각하면 안 됩니다. 타입 매개변수가 제약에 대입할 수 있는 타입인지를 따져보아야 합니다.
그럼 onlyBoolean 함수를 유효하게 만들고 싶다면 어떻게 해야 할까요? 간단합니다. 제네릭을 쓰지 않으면 됩니다.
function onlyBoolean(arg: true | false = true): true | false {
return arg;
}
강박적으로 제네릭을 쓸 필요는 없습니다. 특히 원시값 타입만 사용한다면 대부분 제약을 걸지 않아도 되는 경우가 많습니다. returnVO 함수도 제네릭을 제거하면 에러가 사라집니다.
interface VO {
value: any;
}
const f = (): VO => {
return { value: 'test' };
}