설정 객체는 요즘 거의 const config: Config = {...} 대신 {...} satisfies Config로 써요. 타입 표기를 붙이면 'dark'라고 써 놨는데도 config.mode는 'light' | 'dark'로 읽혀요. satisfies를 쓰면 객체는 Config에 맞는지 검사받고, 변수는 쓴 그대로의 리터럴 타입을 유지해요. 그래서 config.mode는 'dark'이고, 나중에 'light'와 비교하면 죽은 분기가 아니라 타입 오류가 나요.
리터럴에서 속성 이름을 잘못 쓰면 두 방식 모두 잡아 줘요. 4.9 릴리스 노트에도 Record<Colors, string | RGB>에 대고 bleu 키를 잡아내는 예가 있어요.
저를 속인 건 satisfies Record<string, Route>로 쓴 라우트 테이블이었어요. 거기서는 철자가 틀린 라우트 이름이 초과 속성이 아니에요. 모든 문자열 키가 허용되니까 검사는 통과하고, 오타는 아무도 링크하지 않는 라우트가 돼 버려요. 타입 표기 쪽에도 같은 구멍이 있어요. satisfies는 실제보다 더 검사받았다는 기분을 줬을 뿐이에요.
키가 정해져 있으면 이제는 Record<RouteName, Route>처럼 유니온을 직접 적고, 낯선 키가 끼어들면 객체가 실패하게 둬요.