@awenn2015
Веб-программист самоучка

Как типизировать HTML[Script | Link и тд]Element в switch?

Если массив объектов с тегами которые я хочу вставить в верстку, пример такой
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"
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы