// Function returning never must have unreachable end point
// never 를 처리하지 않으면, void 로 추론
function error(message: string): never {
    throw new Error(message);
}

// Inferred return type is never
// never 를 처리하지 않아도, never 로 추론
function fail() {
    return error("Something failed");
}

// Function returning never must have unreachable end point
// never 를 처리하지 않으면, void 로 추론
function infiniteLoop(): never {
    while (true) {
    }
}

Tip) 에러를 막는 용도로 사용

// T 가 object 형이 아닌 경우 사용할 수 없도록 필터링
type Indexable<T> = T extends string
  ? T & { [index: string]: any }
	: never;