satisfies와 타입 주석 비교
형태를 검증하면서도 리터럴 추론을 유지합니다.
satisfies와 타입 주석 비교은(는) CoddyKit의 무료 TypeScript Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 TypeScript Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
타입 주석 패턴
고전적인 패턴인 const config: Type = {...}은 객체를 검증하지만 변수 타입이 Type이 되므로 내부의 리터럴이 확장됩니다.
type Config = { mode: string; level: number };
const config: Config = { mode: "dark", level: 5 };
// config.mode has type string
console.log(config.mode);확장이 나타나는 방식
타입 주석을 사용하면 config.mode는 string입니다. 리터럴 "dark"를 기대하는 변수에 할당할 수 없습니다.
type Config = { mode: string };
const config: Config = { mode: "dark" };
// const m: "dark" = config.mode; // Error: string not assignable to "dark"
console.log(config.mode);satisfies 패턴
const config = {...} satisfies Type을 사용하면 변수는 exact 추론 타입을 유지하면서도 여전히 Type에 맞는지 검사됩니다.
type Config = { mode: string; level: number };
const config = { mode: "dark", level: 5 } satisfies Config;
// config.mode has type "dark"
console.log(config.mode);정확한 추론 보존
이제 config.mode는 리터럴 "dark"이므로 좁은 타입이 필요한 모든 곳에서 작동합니다.
type Config = { mode: string };
const config = { mode: "dark" } satisfies Config;
const m: "dark" = config.mode; // OK
console.log(m);둘 다 여전히 검증함
두 패턴 모두 잘못된 객체를 거부합니다. 차이는 검증 여부가 아니라 결과 변수 타입에만 있습니다.
type Config = { level: number };
// const a: Config = { level: "x" }; // Error
// const b = { level: "x" } satisfies Config; // Error
const ok = { level: 3 } satisfies Config;
console.log(ok.level);추가 속지도 감지됨
타입 주석과 마찬가지로 satisfies는 대상 타입에 없는 초과 속성을 표시하여 키의 오타를 찾는 데 도움을 줍니다.
type Config = { mode: string };
// const c = { mode: "dark", extar: true } satisfies Config; // Error: extar
const c = { mode: "dark" } satisfies Config;
console.log(c.mode);튜플 특성 보존
satisfies는 as const와 함께 사용하면 배열이 튜플과 같은 정확성을 유지하도록 도우면서도 요소 타입을 계속 검증합니다.
type Nums = readonly number[];
const xs = [1, 2, 3] as const satisfies Nums;
// xs is a readonly tuple [1, 2, 3], validated as numbers
console.log(xs.length);타입 주석은 유니온 멤버를 확장함
필드가 "a" | "b"와 같은 유니온이라면 유니온으로 작성한 타입 주석은 해당 값을 유니온으로 유지하지만, 더 넓은 필드 타입은 값을 확장합니다. satisfies는 exact 멤버를 고정합니다.
type Config = { tier: string };
const withAnn: Config = { tier: "pro" }; // tier: string
const withSat = { tier: "pro" } satisfies Config; // tier: "pro"
console.log(withAnn.tier, withSat.tier);읽을 때 자동 완성 유지
satisfies는 리터럴 키와 값을 보존하므로 편집기는 더 넓게 선언된 타입이 아니라 exact 객체를 기준으로 자동 완성을 제공할 수 있습니다.
type Theme = Record<string, string>;
const theme = { bg: "black", fg: "white" } satisfies Theme;
// theme.<autocomplete shows bg and fg>
console.log(theme.bg, theme.fg);둘 중 선택하기
정말로 더 넓은 타입을 원한다면 일반 타입 주석을 사용하십시오. 검증과 함께 나중에 정확하게 추론된 형태도 필요하다면 satisfies를 사용하십시오.
type Config = { mode: string };
// Want wide type for reassignment flexibility -> annotation
let a: Config = { mode: "dark" };
// Want exact literals for later indexing -> satisfies
const b = { mode: "dark" } satisfies Config;
console.log(a.mode, b.mode);나란히 비교한 요약
타입 주석은 확장하고 satisfies는 보존합니다. 둘 다 검증합니다. 읽기만 하는 불변 config에는 일반적으로 satisfies가 더 나은 기본 선택입니다.
type C = { color: string; size: number };
const widened: C = { color: "red", size: 1 };
const exact = { color: "red", size: 1 } satisfies C;
console.log(widened.color, exact.color);빠른 확인: satisfies와 타입 주석
두 방식의 차이를 얼마나 이해했는지 확인해 보십시오.
복습: satisfies와 타입 주석 비교
타입 주석은 검증하지만 리터럴을 기본 타입으로 확장합니다. satisfies 연산자는 검증하면서 정확한 추론을 유지하여 리터럴 값, 키, 튜플의 정확성을 보존합니다.
type C = { mode: string };
const c = { mode: "dark" } satisfies C;
const exact: "dark" = c.mode;
console.log(exact);자주 묻는 질문
“satisfies와 타입 주석 비교” 강의는 무료인가요?
네 — “satisfies와 타입 주석 비교” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 TypeScript Academy 강의 전체를 잠금 해제할 수 있습니다. TypeScript Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“satisfies와 타입 주석 비교”에서 뭘 배우나요?
형태를 검증하면서도 리터럴 추론을 유지합니다. 브라우저에서 직접 실행하는 실습 코드로 TypeScript Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
TypeScript Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 TypeScript Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“satisfies와 타입 주석 비교” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 TypeScript Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 TypeScript Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- satisfies가 존재하는 이유
- satisfies와 타입 주석 비교
- satisfies와 as 단언 비교
- 실용적인 satisfies 패턴