Если массив объектов с тегами которые я хочу вставить в верстку, пример такой
interface TagListType = {
tag: "script" | "link";
attr: HTMLAttributes<HTMLScriptElement | HTMLLinkElement>[];
url: string;
}[];
const tagListExample = [
{
tag: "script",
url: "...",
attr: [],
},
{
tag: "link",
url: "...",
attr: [],
},
];
Все это дело приходит с сервера в виде json так что приходиться типизировать на лету, в общем этот массив я прогоняю через цикл и создаю ноду через createElement
for (const { tag, url, attr} of tagListExample ) {
// type SwitchHtmlElement<T> = "???"
// тип ноды HTMLScriptElement | HTMLLinkElement
const node = document.createElement(tag);
switch (tag) {
case "script": {
node.src = `${STATIC_URL}/js/${url}`;
break;
}
case "link": {
node.href = `${STATIC_URL}/css/${url}`;
break;
}
}
}
Но проблема в том что в свиче тип ноды не подхватывается на лету, так как я его определяю только по самому тексту тега а надо что бы в свитче уже был определенный тип у ноды, HTMLScriptElement в случае с блоком "script"