请考虑以下内容:
class MyCustomElement extends HTMLElement {}
customElements.define('my-custom-element', MyCustomElement);
/** @type {MyCustomElement} */
const myCustomElement = document.createElement('my-custom-element');
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
myCustomElement
将是运行时MyCustomElement
的实例(HTMLElement
的派生);但是,HTMLElement
type-hinting使PhpStorm的JetBrains IDE抱怨:
初始化器类型
myCustomElement
无法分配给变量类型HTMLElement
令人惊讶的是,IDE对内置类型完全没问题:
MyCustomElement
因此,要解决警告,我应该怎么做非常合适的“键入提示”到IDE(不使用/** @type {HTMLDivElement} */
const myDiv = document.createElement('div');
)!
*
运算符实例化myCustomElement
;似乎可行,但是没有提及这两种方法之间的区别(使用new
还是使用new
,以及为什么或为什么不选择一个而不选择另一个?!][Closure无法理解您是从new
实例化MyCustomElement的实例,因为它不了解document.createElement()
对它的内部类型系统的影响*,因此您正在创建一个标记名称为“我的自定义元素”。
您可能想要做的是将document.createElement()
转换为document.createElement
函数:
customElements.define
*:AFAIKT没有证据表明他们打算这样做。