만약 T를 string 대신 'a' | 'b' | 'c'와 같은 요소의 유니언으로 추론되게 하고 싶으면 어떻게 해야 할까요? 4.9 버전까지는 다음과 같이 했습니다.
function values<T>(initial: readonly T[]) {
return {
hasValue(value: T) { return initial.includes(value) },
};
}
const savedValues = values(["a", "b", "c"] as const);
savedValues.hasValue("x");
// Argument of type '"x"' is not assignable to parameter of type '"a" | "b" | "c"'.
as const 접미사로 ['a', 'b', 'c']를 튜플로 만들고, 매개변수에도 readonly 수식어를 붙이면 됩니다. T가 'a' | 'b' | 'c'이므로 'x'에서 에러가 발생합니다.