Вы можете попытаться использовать гиперссылку в качестве родителя, а затем изменить внутренние элементы при наведении. Например:
a.active h1 {color:red;}
a.active:hover h1 {color:green;}
a.active h2 {color:blue;}
a.active:hover h1 {color:yellow;}
Таким образом вы можете изменить стиль во множестве внутренних тегов на основе опрокидывания родительского элемента.
Вы можете использовать перегрузки, чтобы либо вернуть требуемую версию, либо ту, для которой свойство необязательно:
interface IOptions {
clientId: string;
token: string;
}
interface IComponent {
name: string;
parent?: { name: string };
}
async function createComponent(): Promise<IComponent>
async function createComponent(opts: IOptions): Promise<Required<IComponent>>
async function createComponent(opts?: IOptions): Promise<IComponent> {
const component: IComponent = { name: '' };
if (opts) {
component.parent = { name: `${opts.clientId}-${opts.token}` };
}
return component;
}
async function main() {
const opts: IOptions = { clientId: '123', token: '321' };
const component: Required<IComponent> = await createComponent(opts);
console.log(component.parent.name);
}