扩展噩梦的打字

时间:2018-09-16 02:45:13

标签: node.js typescript typescript-typings nightmare

我正在使用herenightmare类的类型。这是通过npm install @types/nightmare

进行的安装

我想扩展现有类型,而无需修改node_modules的index.d.ts。特别是通过添加action()evaluate_now()方法。 action()是静态方法。

这就是我所做的 我在项目根文件夹中创建了一个自定义类型文件

custom-typings.d.ts

declare namespace Nightmare {
  export class Nightmare {
    evaluate_now<T1, T2, R>(
      fn: (arg1: T1, done: T2) => R,
      done: T2,
      arg1: T1
    ): Nightmare;
    static action<T1, T2, R>(name: string, fn: (arg1: T1, done: T2) => R): void;
  }
}

在我的主应用程序文件中,有以下内容

index.ts

/// <reference path='custom-typings.d.ts'/>

import Nightmare = require('nightmare');

function size(this: Nightmare, done: any) {
  this.evaluate_now(() => {
    const w = Math.max(
      document.documentElement.clientWidth,
      window.innerWidth || 0
    );
    const h = Math.max(
      document.documentElement.clientHeight,
      window.innerHeight || 0
    );
    return {
      height: h,
      width: w
    };
  }, done);
}

Nightmare.action('size', size);

// no errors here from the types declared by the @types in node_modules.
new Nightmare()
  .goto('http://yahoo.com')
  .type('input[title="Search"]', 'github nightmare')
  .click('.searchsubmit');

我遇到以下错误

  • “梦ight”类型的属性“ evaluate_now”不存在。
  • 属性“动作”在类型“噩梦”上不存在。

我正在使用Typescript3。似乎未检测到我的自定义键入。我一直在浇注declaration merging documents,但不知道自己在做什么错。

谢谢

1 个答案:

答案 0 :(得分:1)

您在7中声明的全局名称空间与模块无关。相反,您需要扩展模块:

custom-typings.d.ts

但是,declare module "dummy" { module "nightmare" { // ... } } 类是按原始类型(Nightmare)导出分配的,并且AFAIK导出分配的类目前无法扩充;参见this previous answer。因此,您必须将export = Nightmare的修改后的副本添加到您的项目中。