다음과 같이 컨디셔널 타입에도 사용할 수 있습니다.
type ElementType<T> = T extends any[] ? ElementType<T[number]> : T;
다만 타입 인수로 사용하는 것은 불가능합니다.
type T = number | string | Record<string, T>;
// Type alias 'T' circularly references itself.
이 경우는 타입 인수를 쓰지 않는 방식으로 수정해야 합니다.
type T = number | string | { [key: string]: T };
자바스크립트에서 재귀 함수를 사용할 때는 Maximum call stack size exceeded 에러를 조심해야 합니다. 재귀 함수의 호출이 종료되는 조건이 없어 무한하게 호출이 일어날 때 발생하는 에러입니다.
자바스크립트
function a() {
a();
}
a(); // Uncaught RangeError: Maximum call stack size exceeded