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??
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
@basarat devi "esportare" l'interfaccia? è richiesto? cosa succede quando non esporti? –
@MohamedNon devi esportarlo se vuoi renderlo pubblicamente disponibile. –