타입스크립트의 객체 타입은 자바스크립트의 객체와 같고, 타입스크립트의 배열 타입은 자바스크립트의 배열과 같습니다.
그렇다면 자바스크립트에서 유니온 타입에 해당하는 것은 무엇일까요?
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"
인데, 어떤 액션인지 알 수 없으니 그냥 둘 다인 척하면 됩니다.
둘 다인 경우, 정의하는 모든 가능한 코드 경로에 대해 해당 값으로 수행하는 모든 작업을 평가해야 한다는 뜻입니다.