Polymer v3 的打字稿支持
Typescript support for polymer v3
我目前正在测试 polymer 3 预览版,看看如何将它集成到我们的团队工作流程中。
在 v3 中声明元素的推荐方法是:
import { PolymerElement } from '@polymer/polymer/polymer-element.js';
...
class MyElement extends PolymerElement {
...
}
参见:https://www.polymer-project.org/blog/2018-03-23-polymer-3-latest-preview.html
对于基本的东西,这与打字稿配合得很好,但它不理解 class MyElement 扩展 HTMLElement。因此,如果我尝试在我的代码中使用 this.dispatchEvent(...),编译将失败。
我尝试设置 .d.ts 来尝试教授打字稿,但我无法让它工作。所有这些都几乎没有成功。
1) 直接输入:
class PolymerElement extends HTMLElement{}
2) 输入模块:
declare module "polymer-element" {
export class PolymerElement extends HTMLElement {}
}
还有一些变体,但它似乎从未被转译器挑选出来。
有 idas 吗?
v3 似乎还不支持 TypeScript 类型
您可以在 v3.x branch titled Delete typings for now. 中看到一个提交。
解决方案:
1.Just 对 TypeScript 说还不关心:
class MyElement extends PolymerElement {
fn(){
(this as any).dispatchEvent(...)
}
}
2.Your 元素可以声明直接从 HTMLElement
:
扩展
class MyElement extends PolymerElement, HTMLElement {
fn() {
this.dispatchEvent(...)
}
}
我很确定你必须将模块声明为 "@polymer/polymer/polymer-element"
而不是 "polymer-element"
,除非你将类型直接添加到 [=13] 中的路径 @polymer/polymer
=].
此外,我不确定您应该导入 polymer-element.js
而不是导入 polymer-element
。 .js
扩展可能会中断添加类型。
从 3.0.5 版开始,TypeScript 声明包含在 @polymer/polymer
NPM 包本身中,对于所有 iron-
、paper-
等元素,从 3.0 版开始.0.
import {PolymerElement, html} from '@polymer/polymer';
class MyElement extends PolymerElement {
static get template() {
return html`<p>Hello [[who]]</p>`;
}
static get properties() {
return {
who: String,
};
}
who = 'World';
}
customElements.define('my-element', MyElement);
您还可以使用 @polymer/decorators
包来获得更好的类型安全性和更方便的语法:
import {PolymerElement, html} from '@polymer/polymer';
import {customElement, property} from '@polymer/decorators';
@customElement('my-element')
class MyElement extends PolymerElement {
static get template() {
return html`<p>Hello [[who]]</p>`;
}
@property({type: String})
who = 'World';
}
我目前正在测试 polymer 3 预览版,看看如何将它集成到我们的团队工作流程中。
在 v3 中声明元素的推荐方法是:
import { PolymerElement } from '@polymer/polymer/polymer-element.js';
...
class MyElement extends PolymerElement {
...
}
参见:https://www.polymer-project.org/blog/2018-03-23-polymer-3-latest-preview.html
对于基本的东西,这与打字稿配合得很好,但它不理解 class MyElement 扩展 HTMLElement。因此,如果我尝试在我的代码中使用 this.dispatchEvent(...),编译将失败。
我尝试设置 .d.ts 来尝试教授打字稿,但我无法让它工作。所有这些都几乎没有成功。
1) 直接输入:
class PolymerElement extends HTMLElement{}
2) 输入模块:
declare module "polymer-element" {
export class PolymerElement extends HTMLElement {}
}
还有一些变体,但它似乎从未被转译器挑选出来。 有 idas 吗?
v3 似乎还不支持 TypeScript 类型
您可以在 v3.x branch titled Delete typings for now. 中看到一个提交。
解决方案:
1.Just 对 TypeScript 说还不关心:
class MyElement extends PolymerElement {
fn(){
(this as any).dispatchEvent(...)
}
}
2.Your 元素可以声明直接从 HTMLElement
:
class MyElement extends PolymerElement, HTMLElement {
fn() {
this.dispatchEvent(...)
}
}
我很确定你必须将模块声明为 "@polymer/polymer/polymer-element"
而不是 "polymer-element"
,除非你将类型直接添加到 [=13] 中的路径 @polymer/polymer
=].
此外,我不确定您应该导入 polymer-element.js
而不是导入 polymer-element
。 .js
扩展可能会中断添加类型。
从 3.0.5 版开始,TypeScript 声明包含在 @polymer/polymer
NPM 包本身中,对于所有 iron-
、paper-
等元素,从 3.0 版开始.0.
import {PolymerElement, html} from '@polymer/polymer';
class MyElement extends PolymerElement {
static get template() {
return html`<p>Hello [[who]]</p>`;
}
static get properties() {
return {
who: String,
};
}
who = 'World';
}
customElements.define('my-element', MyElement);
您还可以使用 @polymer/decorators
包来获得更好的类型安全性和更方便的语法:
import {PolymerElement, html} from '@polymer/polymer';
import {customElement, property} from '@polymer/decorators';
@customElement('my-element')
class MyElement extends PolymerElement {
static get template() {
return html`<p>Hello [[who]]</p>`;
}
@property({type: String})
who = 'World';
}