Как написать файл Typescript d.ts для расширения @ types / d3 - PullRequest
0 голосов
/ 21 мая 2018

Я ищу в Google и успешно расширяю выбор d3js с помощью следующего кода TS:

import * as d3 from "d3";
d3.selection.prototype.popover = function() {};

И затем использую его из другого файла TS, например:

(d3.select("svg").selectAll(".node") as any).popover();

Это работает, но мне здесь не нравится "any", и я хочу расширить определение @types/d3 (я уже установил install @ types / d3).Я создаю d3.extend.d.ts вдоль файла кода функции ts и пишу:

/// <referencepath="../../node_modules/@types/d3-selection/index.d.ts">
declare module "d3-selection"{
   export interface Selection<GElement extends BaseType, Datum, PElement extends BaseType, PDatum>{
      popover();
   }
}

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

Обновлено: я обновил свой код на основе ответа, чтобы сделать его окончательной рабочей версией

1 Ответ

0 голосов
/ 21 мая 2018

В вашей декларации для слияния необходимо использовать имя модуля - d3-selection - в котором объявлено Selection.Как это:

declare module "d3-selection" {
  export interface Selection<
    GElement extends BaseType,
    Datum,
    PElement extends BaseType,
    PDatum
  > {
    popover(): void;
  }
}
...