【发布时间】:2017-04-26 10:05:46
【问题描述】:
TypeScript 2.1 显然现在支持编写自定义 html 元素 ("What's new in TypeScript - 2.1")
但是我一直找不到任何关于它应该如何工作的文档。
谁能解释一下这应该如何工作,最好是举例说明?
谢谢
【问题讨论】:
标签: typescript custom-element typescript2.1
TypeScript 2.1 显然现在支持编写自定义 html 元素 ("What's new in TypeScript - 2.1")
但是我一直找不到任何关于它应该如何工作的文档。
谁能解释一下这应该如何工作,最好是举例说明?
谢谢
【问题讨论】:
标签: typescript custom-element typescript2.1
我在那个页面上唯一能找到的关于自定义元素的是在 ES5 allows TypeScript to be used to define custom elements 中处理 super() 调用的新方法。
这只是意味着您现在可以编写常规的 ES2015 代码来定义自定义元素,并且新的 TypeScript 编译器将为它输出 正确 ES5 代码。以前,输出的代码在调用 super() 时不会做正确的事情,这会破坏自定义元素类。
没有 TypeScript 示例,因为这并不是 TypeScript 所特有的。它只是遵循自定义元素标准:
class MyCustomElement extends HTMLElement {
constructor() {
super();
this.foo = "bar";
}
doSomething() {
console.log(this.foo);
}
}
customElements.define("my-custom-element", MyCustomElement);
【讨论】:
Uncaught TypeError: Failed to construct 'HTMLElement': Please use the 'new' operator, this DOM object constructor cannot be called as a function
目前,当使用 TypeScript 定位 ES5 时,这是不可能。 Custom Elements API V1 需要 ES6/ES2015 风格的类。但是,如果您使用 TypeScript 来定位 ES5(例如为了与 IE 11 兼容)所有类都会被转译为函数。
这不是 TypeScript 限制,而是自定义元素 API V1 itself 的限制。
你有两个选择:
TypeScript 2.1 的发行说明具有误导性;这根本不是 TypeScript 问题。有关更多背景信息,请参阅此issue。
【讨论】: