2 votes

Comment écrire un fichier Typescript d.ts pour étendre @types/d3

Je cherche sur google et j'ai réussi à étendre la sélection d3js avec le code ts suivant :

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

Et ensuite l'utiliser à partir d'un autre fichier ts comme :

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

Cela fonctionne, mais je n'aime pas " any "et que vous souhaitez étendre le @types/d3 définition (j'ai déjà installé @types/d3). Je crée un fichier d3.extend.d.ts le long du code de la fonction ts, et j'écris :

/// <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();
   }
}

Mais cela ne semble pas fonctionner, si j'enlève any du code d'appel, le compilateur obtiendra une erreur.

Mis à jour : J'ai mis à jour mon code basé sur la réponse pour qu'il soit la version finale du travail.

1voto

cartant Points 35253

La fusion de vos déclarations doit utiliser le nom du module - d3-selection - dans laquelle Selection est déclaré. Comme ceci :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X