2015-10-05 5 views
19

Nel mio progetto TypeScript, utilizzo le definizioni DefinitelyTyped per le dipendenze js esterne.Estende l'interfaccia definita nel file .d.ts

A volte può succedere che queste definizioni siano obsolete. Potrebbe anche accadere che alcune librerie possano aggiungere nuovi metodi in fase di esecuzione, come express-validator in cui è possibile definire funzioni di convalida personalizzate.

Pertanto desidero estendere le definizioni .d.ts aggiungendo nuovi metodi e/o proprietà.

Quindi, se ho la mia DefinitelyTyped defininiton in express-validator.d.ts:

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

come posso estendere Validator dell'interfaccia all'interno, per esempio, il mio 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?? 

risposta

20

// come estendere l'interfaccia Validator aggiungendo metodo IsArray() ??

È Non si può fare questo in un file che è un modulo (some guidance here) e il file è un modulo perché avete import expressValidator.

creare invece un extendedValidator.d.ts e aggiungere il nuovo materiale per il motore del dattiloscritto:

declare module ExpressValidator { 
    export interface Validator { 
    isArray: any; 
    } 
} 
+1

Avete a che fare qualcosa di specifico con il file 'd.ts' una volta che è stato creato? L'ho fatto ma ricevo comunque l'errore che la mia nuova proprietà non esiste. Devo metterlo in una posizione specifica o fare qualcos'altro per farlo riconoscere dal compilatore? – WillyC

+0

@basarat devi "esportare" l'interfaccia? è richiesto? cosa succede quando non esporti? –

+0

@MohamedNon devi esportarlo se vuoi renderlo pubblicamente disponibile. –

Problemi correlati