"通话目标不包含任何签名"调用super()而没有打字文件

时间:2017-07-06 11:51:30

标签: typescript

我试图让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

现在,我有两个问题:

  1. 如何(如果有的话)我可以让打字稿忽略这一点并假设它有一个可以调用的超级构造函数?
  2. 如何(如果有的话)我声明一个包含超类签名的打字文件?我还没有找到合适的文档(以及我目前遇到的各种用例)。

3 个答案:

答案 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}) {
    ...
}