web-dev-qa-db-fra.com

Étendre l'interface définie dans le fichier .d.ts

Dans mon projet TypeScript, j'utilise des définitions DefinitelyTyped pour les dépendances js externes.

Il peut parfois arriver que ces définitions soient obsolètes. Il peut également arriver que certaines bibliothèques puissent ajouter de nouvelles méthodes au moment de l'exécution, comme express-validator dans lesquelles vous pouvez définir des fonctions de validation personnalisées.

Je voudrais donc étendre ces .d.ts définitions ajoutant de nouvelles méthodes et/ou propriétés.

Donc, si j'ai ma définition DefinitelyTyped dans express-validator.d.ts:

declare module ExpressValidator {
  export interface Validator {
    is(): Validator;
    not(): Validator;
    isEmail(): Validator;
    ...
  }
}

comment puis-je étendre l'interface Validator dans, par exemple, mon application.ts?

///<reference path='../typings/tsd.d.ts' />

import expressValidator = require('express-validator');
export var app = express();

app.use(expressValidator({
    customValidators: {
        isArray: function(value) {
            return Array.isArray(value);
        }
 }
}));

// How to extend Validator interface adding isArray() method??
27
Marco Ancona

// Comment étendre l'interface Validator en ajoutant la méthode isArray () ??

Vous ne pouvez pas le faire dans un fichier qui est un module ( quelques conseils ici ) et votre fichier est un module parce que vous avez import expressValidator.

Créez plutôt un extendedValidator.d.ts et ajoutez le nouveau truc pour le moteur de TypeScript:

declare module ExpressValidator {
  export interface Validator {
     isArray: any;
  }
}
27
basarat