对polymer v3的Typescript支持

对polymer v3的Typescript支持,typescript,polymer,typescript-typings,polymer-3.x,Typescript,Polymer,Typescript Typings,Polymer 3.x,我目前正在测试polymer 3 preview,以了解如何将其集成到我们的团队工作流程中 建议在v3中声明元素的方法是: import { PolymerElement } from '@polymer/polymer/polymer-element.js'; ... class MyElement extends PolymerElement { ... } 见: 对于基本的东西,这与typescript配合得很好,但是它不理解类MyElement扩展了HTMLElement。因此,如

我目前正在测试polymer 3 preview,以了解如何将其集成到我们的团队工作流程中

建议在v3中声明元素的方法是:

import { PolymerElement } from '@polymer/polymer/polymer-element.js';
...
class MyElement extends PolymerElement {
  ...
}
见:

对于基本的东西,这与typescript配合得很好,但是它不理解类MyElement扩展了HTMLElement。因此,如果我尝试在代码中使用this.dispatchEvent(…),编译将失败

我试着设置一个.d.ts来教打字稿,但我无法让它工作。所有这些都非常不成功

1) 直接打字:

class PolymerElement extends HTMLElement{}
2) 键入模块:

declare module "polymer-element" {
    export class PolymerElement extends HTMLElement {}
}
和一些更多的变化,但它似乎从来没有被挑出的运输。
有IDA吗?

v3似乎还不支持打字脚本

您可以在标题栏中看到提交

解决方案:

1.只需对TypeScript说“不在乎”:

class MyElement extends PolymerElement {
  fn(){
     (this as any).dispatchEvent(...) 
  }
}
2.您的元素可以从
HTMLElement
声明为extends direclty:

class MyElement extends PolymerElement, HTMLElement {
    fn() {
        this.dispatchEvent(...)
    }
}

我很确定您必须将模块声明为
“@polymer/polymer/polymer element”
,而不仅仅是
“polymer element”
,除非您将键入直接添加到
@polymer/polymer
节点模块中的路径
@polymer/polymer


另外,我不确定您应该导入
polymer element.js,而是导入
polymer element
.js
扩展可能会中断添加打字。

从3.0.5版开始,类型脚本声明包含在NPM包本身中,对于从3.0.0版开始的所有
铁-
纸-
等元素

从'@polymer/polymer'导入{polymerement,html};
类MyElement扩展了聚合关系{
静态获取模板(){
返回html`Hello[[who]]

`; } 静态获取属性(){ 返回{ 谁:弦, }; } who=‘世界’; } 自定义元素。定义('my-element',MyElement);
您还可以使用该包获得更好的类型安全性和更方便的语法:

从'@polymer/polymer'导入{polymerement,html};
从“@polymer/decorators”导入{customElement,property};
@customElement(“我的元素”)
类MyElement扩展了聚合关系{
静态获取模板(){
返回html`Hello[[who]]

`; } @属性({type:String}) who=‘世界’; }
即使他们没有正式的打字,也应该可以编写自定义的,以允许typescript工作。你是对的,我提出了第二种解决方案,这需要在所有类中添加一个额外的类型。遗憾的是,第二个解决方案失败了,
类只能扩展一个类。
我很确定您必须将模块声明为
“@polymer/polymer/polymer element”
,而不仅仅是
“polymer element”
,除非您将打字直接添加到
节点\u模块中的路径
@polymer/polymer
。此外,我不确定您是否应该导入
polymer element.js
而不是导入
polymer element
.js
扩展可能会中断添加打字。您给了我正确的方向。我要做的是1)将文件声明为
@polymer/index.d.ts
2)将模块声明为
@polymer/polymer/polymer element
,但3)导入
polymer element
,而不是
.js
文件@amit-b请随意发布一个实际答案。您是否也知道如何获取聚合物元素的打字(即纸张输入)?我可以看到每个元素在其repo中都有一个typings.d.ts文件,但是当使用NPM获取时,它们并不包括在内。我曾考虑过使用gen typescript脚本,但在项目中包含typescript感觉像是一种黑客行为。3.0元素的打字还没有完全准备好,但工作正在进行中。它们将与最终版本3.0一起发布,或者在不久之后,有时在接下来的几周内发布。所有3.0聚合物元素的打字脚本本周已发布到NPM()。这太棒了,感谢大家的提醒!我再试试看。