расширить печатать для кошмара - PullRequest
0 голосов
/ 16 сентября 2018

Я использую тип для класса nightmare из здесь .Это установка через npm install @types/nightmare

Я бы хотел расширить существующие типы без изменения index.d.ts из node_modules.В частности, добавив методы 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');

Я получаю следующие ошибки

  • Property 'valu_now 'не существует в типе' Nightmare '.
  • Свойство' action 'не существует в типе' typeof Nightmare '.

Я использую Typescript 3. Похоже,мои пользовательские наборы не обнаруживаются.Я поливал декларацию о слиянии документов , но я не знаю, что я делаю не так.

Спасибо

1 Ответ

0 голосов
/ 17 сентября 2018

Глобальное пространство имен, которое вы объявили в custom-typings.d.ts, не имеет ничего общего с модулем.Вместо этого вам нужно дополнить модуль:

declare module "dummy" {
  module "nightmare" {
    // ...
  }
}

Однако класс Nightmare назначается для экспорта в исходных типах (export = Nightmare), и AFAIK назначенные для экспорта классы в настоящее время не могут бытьдополненный;см. этот предыдущий ответ .Поэтому вам придется добавить измененную копию @types/nightmare в ваш проект.

...