模块扩充错误:'x'仅指类型,但在此处用作值

时间:2017-06-29 10:59:41

标签: angular typescript protractor

我对此有点新鲜。如果我弄错了,请原谅。 我正在尝试这样做以在量角器ElementFinder类原型上定义一个方法。

我在这里遵循合并拉取请求中的语法。https://github.com/Microsoft/TypeScript/pull/6213

> 1 import { ElementFinder} from "protractor";
> 2 
> 3 declare module "protractor" {
> 4   interface ElementFinder {
> 5        doSomething(): void;
> 6    } }
> 7
> 8
> 9  ElementFinder.prototype.doSomething = function (): void {
> 10    console.log(""); 
> 11 };

我在第9行收到此错误

  

[ts]'ElementFinder'仅指一种类型,但被用作一种类型   这里的价值。

我在这里做错了什么?在示例中唯一不同的是我使用的是npm模块,而不是我的包中定义的模块。这样就不可能增加模块吗?

1 个答案:

答案 0 :(得分:2)

看起来ElementFinder的输入是interface而不是class。似乎没有名为ElementFinder的导出对象可以引用以获取其原型。量角器是否在运行时为您提供了ElementFinder构造函数?如果是这样,您可以这样输入:

type Constructor<T> = {
    new (...args: any[]): T;
    readonly prototype: T;
}
declare module "protractor" {
  interface ElementFinder {
    doSomething(): void;
  }
  export const ElementFinder: Constructor<ElementFinder>;
}

这个应该修复类型错误,但要确保在运行时确实存在ElementFinder构造函数,否则在运行它时会爆炸。