타입스크립트의 객체 타입은 자바스크립트의 객체와 같고, 타입스크립트의 배열 타입은 자바스크립트의 배열과 같습니다.

그렇다면 자바스크립트에서 유니온 타입에 해당하는 것은 무엇일까요?

Gabriel Vergnaud에 따르면 이 둘은 실제로 같은 방식으로 정의할 수 없다고 합니다.

유니온 타입은 코드가 시간이 지남에 따라 처리할 수 있는 다양한 가능성을 나타냅니다.

실제 예를 들어 사무실로 걸어가다가 커피를 마시고 싶은데 늦어지고 있다고 가정해 보겠습니다.

커피숍이 보이면 들어가서 커피를 마실 것인가, 아니면 바로 사무실로 갈 것인가를 선택해야 하나요?

한 사람으로서 여러분은 선택을 하게 될 것입니다.

하지만 이를 타입스크립트 코드에 매핑하고 이 동작을 매개변수로 사용하는 함수가 있다면, 타입스크립트의 관점에서 보면 이 모든 가능성이 동시에 존재합니다.

서로 다른 평행 우주가 존재하며, 일어날 수 있는 모든 일이 일어납니다!

function walkToTheOffice(action: "grabACoffee" | "keepWalking") {
	const transitions = {
		grabACoffee: "late",
		keepWalking: "on time",
	} as const;

	const result = transitions[action];
	// ^? const result: "late" | "on time"
	console.log(result);
}

walkToTheOffice("grabACoffee"); // "late"

walkToTheOffice("keepWalking"); // "on time"

export {};

유니온 타입을 정의하면 멀티버스가 생성되고, 갑자기 두 가지가 동시에 존재하게 됩니다.

타입스크립트의 관점에서 보면 action"grabACoffee" | "keepWalking" 인데, 어떤 액션인지 알 수 없으니 그냥 둘 다인 척하면 됩니다.

둘 다인 경우, 정의하는 모든 가능한 코드 경로에 대해 해당 값으로 수행하는 모든 작업을 평가해야 한다는 뜻입니다.