typescriptfrontend
TypeScript satisfies, as를 쓰기 전에
조회 0
설정 객체에 타입을 붙이는 세 가지 방법이 있다.
type Config = Record<string, { url: string; retry?: number }>;
// 1. 타입 주석 — 키 자동완성이 죽는다
const config1: Config = {
github: { url: "https://api.github.com" },
};
config1.github; // 타입은 { url; retry? } — 정확하지만
config1.anything; // 이것도 통과해버린다 (Record라서)
// 2. as — 검사를 끈다
const config2 = { github: { url: 123 } } as Config; // url이 number인데 통과!
// 3. satisfies — 검사하되 추론은 유지
const config3 = {
github: { url: "https://api.github.com" },
} satisfies Config;
config3.github.url; // string으로 정밀 추론
config3.naver; // ✅ 컴파일 에러 — 없는 키
핵심 차이
- 주석(
:): 값을 넓은 타입으로 "승격"시킨다. 리터럴 정보가 사라진다 as: "내 말을 믿어"다. 틀려도 컴파일러가 입을 다문다satisfies: "이 형태를 만족하는지 검사만 해줘, 추론은 그대로 둬"
실전에서 빛나는 곳
const routes = {
home: "/",
: ,
: ,
} <, >;
= keyof routes;