我试图让Polymer 2.0与Typescript一起工作,并且在制作构造函数时遇到问题,其中库(包括Polymer 2)没有公开正确的打字文件。在最简单的情况下:
class MyView1 extends Polymer.Element {
public static is = 'my-view1';
constructor() {
super(); // [ts] Call target does not contain any signature
}
}
为了在没有构造函数的情况下进行编译,我在主declare var Polymer: any;
文件中完成了.d.ts
。
现在,我有两个问题:
答案 0 :(得分:2)
您可以展开声明,在Element
属性中包含构造函数:
declare var Polymer: {
Element: {
new ();
}
};
对于第二个问题,您可以将其移至*.d.ts
文件。请参阅documentation on creating declaration files。
答案 1 :(得分:0)
通常,这是因为您有条件逻辑可以更改超类的内容。例如-
class A {
constructor() {
super(/* anything */);
}
}
class B {
constructor() {
super(/* anything */);
}
}
var X = { prod: A, qa: A, dev: B, mock: B }[ environment.type ]; // inline map
class C extends X {
constructor() {
super(/* anything */);
}
}
-如果type
甚至没有在{{1}上声明,或者[潜在地]如果TypeScript特别认为environment
可能是采用子类提供的参数。
答案 2 :(得分:0)
这对我有用:
class MyView1 extends (Polymer.Element as {new(): any}) {
...
}