如何使用带有 init 函数的 TypeScript 和 OLOO 模式键入“This”

How to type "This" using TypeScript and OLOO pattern with init function

提问人:SrdjaNo1 提问时间:11/7/2022 更新时间:11/7/2022 访问量:34

问:

根据 OLOO 模式,我们需要函数。出于这个原因,我必须键入“This”并将其添加为函数的第一个参数。不幸的是,现在我在网上收到一个错误,说它缺少属性、 和 。initAutocomplete.init()inputurllistUIoverlay

interface This {
  input: HTMLInputElement;
  url: string;
  listUI: HTMLElement;
  overlay: HTMLElement;
  wrapInput: () => void;
  createUI: () => void;
}

const Autocomplete = {
  wrapInput: function (this: This) {
    let wrapper = document.createElement("div");
    wrapper.classList.add("autocomplete-wrapper");
    this.input.parentNode?.appendChild(wrapper);
    wrapper.appendChild(this.input);
  },

  createUI: function (this: This) {
    let listUI = document.createElement("ul");
    listUI.classList.add("autocomplete-ui");
    this.input.parentNode?.appendChild(listUI);
    this.listUI = listUI;

    let overlay = document.createElement("div");
    overlay.classList.add("autocomplete-overlay");
    overlay.style.width = `${this.input.clientWidth}px`;

    this.input.parentNode?.appendChild(overlay);
    this.overlay = overlay;
  },

  init: function (this: This) {
    this.input = document.querySelector("input") as HTMLInputElement;
    this.url = "/countries?matching=";

    this.wrapInput();
    this.createUI();
  },
};

document.addEventListener("DOMContentLoaded", () => {
  Autocomplete.init();
});

我不确定如何解决此问题,因为我需要键入“This”才能使其工作。否则,它会抛出一个没有输入等的错误。this

打字稿 哎呀 这个

评论

0赞 Dimava 11/7/2022
顺便说一句,为什么不上课
0赞 SrdjaNo1 11/7/2022
我能够在课堂上做到这一点,但想看看如何使用 OLOO 来完成它

答: 暂无答案