// S generic constraint
interface WithName {
    name: string;
}

function getName<T extends WithName>(obj: T): string {
    return obj.name;
}

// S utility typem
function getName2(obj: Pick<{ name: string }, 'name'>): string {
    return obj.name;
}