기본타입

1개의 게시글

TypeScript

[TypeScript] 타입 계층도로 살펴보는 기본 타입 (unknown, never, void, any)

November 27, 2025

지난 포스팅에서 "타입은 집합이다" 라는 사실을 배웠다. 이번에는 이 개념을 확장해서 타입스크립트의 전체 족보, 즉 타입 계층도를 뜯어보자. 계층도의 위치에 따라 타입 간의 호환성(업캐스팅, 다운캐스팅)이 결정된다. 1. 타입 계층도 (Type Hierarchy) 먼저 전체적인 그림을 보자. 가장 위에는 unknown이 있고, 가장 아래에는 never가 있다. 그리고 그 사이를 any가 가로지르고 있다. ![계층타입.png](https://akodhrjerwyxttclrzkq.supabase.co/storage/v1/object/public/images/images/1764215478342-qpmqxcxn4uj.png) --- 2. unknown 타입 (전체 집합) unknown 타입은 타입 계층도의 최상단에 위치한다. 집합으로 따지면 모든 타입을 포함하는 전체 집합(Universal Set) 이다. 특징 1. 모든 타입을 받을 수 있다 (업캐스팅): unknown은 모든 타입의 부모(슈퍼 타입)이므로, 어떤 값이든 할당할 수 있다. 2. 아무데도 들어갈 수 없다 (다운캐스팅 불가): 부모가 자식 집합에 들어갈 수 없듯이, unknown 타입의 값은 any를 제외한 그 어떤 타입의 변수에도 할당할 수 없다. ts let a: unknown = 1; // ✅ 가능 (number -> unknown) let b: unknown = "hello"; // ✅ 가능 (string -> unknown) let unknownVal: unknown; // let num: number = unknownVal; // ❌ 불가능 (unknown -> number) --- 3. never 타입 (공집합) never 타입은 타입 계층도의 가장 아래에 위치한다. 집합으로 따지면 아무것도 포함하지 않는 공집합(Empty Set) 이다. 특징 1. 값이 없다: 공집합이므로 never 타입에 해당하는 값은 존재하지 않는다. 2. 모든 타입에 들어갈 수 있다 (업캐스팅): 공집합은 모든 집합의 부분 집합이다. 따라서 never는 모든 타입의 자식(서브 타입)이며, 모든 타입으로 할당 가능하다. 3. 아무것도 받을 수 없다 (다운캐스팅 불가): 그 어떤 타입도 never 타입으로 다운캐스팅할 수 없다. 사용 예시 주로 정상적으로 종료되지 않는(반환값이 없는) 함수에 사용된다. ts function errorFunc(): never { throw new Error(); } let num: number = errorFunc(); // ✅ 가능 (never -> number) // let n: never = 10; // ❌ 불가능 (number -> never) --- 4. void 타입 void는 아무것도 반환하지 않는 함수의 반환값으로 주로 쓰인다. 계층도상에서 void는 undefined 타입의 슈퍼 타입(부모)에 해당한다. 특징 1. undefined를 품는다: undefined는 void의 서브 타입이므로, void 타입 변수에 undefined를 할당할 수 있다. 2. 엄격한 할당: void에는 undefined와 never를 제외하고는 다른 값을 할당할 수 없다. ts function noReturn(): void { return undefined; // ✅ 가능 } let voidVar: void; voidVar = undefined; // ✅ 가능 --- 5. any 타입 (치트키) any 타입은 사실상 타입 계층도를 무시하는 치트키다. 모든 타입의 슈퍼 타입이 될 수도 있고, 서브 타입이 될 수도 있는 예외적인 존재다. 특징 1. 모든 타입 -> any (업캐스팅): 어떤 값이든 any 변수에 넣을 수 있다. 2. any -> 모든 타입 (다운캐스팅): any 변수는 어떤 타입의 변수에도 넣을 수 있다. ts let anyValue: any; // 모든 값을 다 받음 (업캐스팅) anyValue = 10; anyValue = "hello"; // 모든 곳에 다 들어감 (다운캐스팅) let num: number = anyValue; let str: string = anyValue; any는 타입 시스템의 규칙을 파괴하므로, 사용에 각별한 주의가 필요하다. --- 요약 - unknown: 전체 집합 (최상위). 모든 값을 받지만, 어디에도 못 간다. - never: 공집합 (최하위). 값을 못 받지만, 어디든 갈 수 있다. - void: undefined의 부모. - any: 계층 파괴자. 규칙을 무시하고 어디든 오고 간다.

TypeScriptStudyTypeHierarchy기본타입