export interface Lineage { parent: Lineage | null child: Lineage | null } export function newest( origin: T, ): Exclude | T { let scion: Exclude | T = origin while (scion.child !== null) { scion = scion.child as Exclude } return scion } export function eldest( origin: T, ): Exclude { let scion: Exclude | T = origin while (scion.parent !== null) { scion = scion.parent as Exclude } return scion as Exclude }