Расширение определений DefinitelyTyped .d.ts

Я пытаюсь использовать кошмар в машинописи с типами из DefinitelyTyped. однако типы там неполные (отсутствует метод then), а еще я хочу добавить динамически некоторые методы (как это сделано в этот плагин).

Я не понимаю, как расширить интерфейс Nightmare без форка DefinitelyTyped. Я прочитал несколько страниц по этому вопросу:

Расширить интерфейс, определенный в файле .d.ts

http://obaidurrehman.github.io/2015/10/30/extending-typeScript-definitions/

Поэтому я попытался создать файл extendNightmare.d.ts, который я поместил вместе со всеми остальными файлами .ts.

declare namespace Nightmare {
  class Nightmare {
    waitForDevTools(): void;
    then(): Nightmare;
  }
}

На данный момент я не знаю, что делать, чтобы сказать компилятору использовать мое новое определение, которое должно расширять существующее.

Я попытался добавить эту строку вверху файла, используя кошмар, но это не сработало:

/// <reference path="./extendNightmare.d.ts"/>

Также я хотел бы расширить интерфейс IConstructorOptions из пространства имен Nightmare, но я не знаю, как это сделать. Это верно?

declare namespace Nightmare {
  class Nightmare {
    waitForDevTools(): void;
    then(): Nightmare;
  }

  export interface IConstructorOptions {
    switches: any;
  }
}

Код, который я использую для воспроизведения этой проблемы:

/// <reference path="./extendNightmare.d.ts"/>

import * as Nightmare from "nightmare";

const switches = {
  "ignore-certificate-errors": true,
  "proxy-server": "localhost:10000",
};

function render_page(url) {
  const options = {
    switches,
  };

  const nightmare = new Nightmare(options);

  nightmare
  .goto(url)
  .then((infos) => {
    console.info(infos);
  })
  .end()
  .then(() => {
    console.info(`${url}: done`);
  });
}

render_page("https://google.com");

В моем package.json у меня есть:

"nightmare": "^2.9.1",
"@types/nightmare": "^1.6.30",

person Louis Roché    schedule 03.05.2017    source источник
comment
Просто к вашему сведению, ключевое слово module устарело для объявления пространства имен. Вместо этого используйте ключевое слово namespace.   -  person Aluan Haddad    schedule 03.05.2017
comment
можете ли вы опубликовать код, который использует расширенные определения.   -  person Markus    schedule 03.05.2017
comment
Конечно. Я добавил код в исходный пост.   -  person Louis Roché    schedule 04.05.2017
comment
Вы когда-нибудь догадывались об этом?   -  person joe_coolish    schedule 02.12.2019
comment
Я перешел на кукловод вместо кошмара, никогда особо не копался в этой проблеме.   -  person Louis Roché    schedule 03.12.2019