typescript - Utvid grensesnitt definert i .d.ts-fil
I mitt TypeScript-prosjekt bruker jeg DefinitelyTyped-definisjoner for eksterne js-avhengigheter.
Noen ganger kan det hende at disse definisjonene er utdaterte. Det kan også hende at noen biblioteker kan legge til nye metoder ved kjøring, som express-validator der du kan definere egendefinerte valideringsfunksjoner.
Derfor vil jeg gjerne utvide disse .d.ts-definisjonene ved å legge til nye metoder og/eller egenskaper.
Så hvis jeg har min DefinitelyTyped-definisjon i express-validator.d.ts:
declare module ExpressValidator {
export interface Validator {
is(): Validator;
not(): Validator;
isEmail(): Validator;
...
}
}
Hvordan kan jeg utvide Validator-grensesnittet innenfor, for eksempel, min 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??
Svar #1
// Hvordan utvide Validator-grensesnittet ved å legge til isArray()-metoden??
Du kan ikke gjøre dette i en fil som er et modul (noe veiledning her), og filen din er et modul fordi du har import expressValidator.
Lag i stedet en extendedValidator.d.ts og legg til det nye for TypeScripts motor:
declare module ExpressValidator {
export interface Validator {
isArray: any;
}
}
Svar #2
Jeg klarte å oppnå dette ved å følge instruksjonene på https://www.credera.com/blog/technology-solutions/typescript-adding-custom-type-definitions-for-existing-libraries/. Der bruker de eksemplet react.
import 'react';
declare module 'react' {
interface OlHTMLAttributes<T> {
type?: "1" | "a" | "A" | "i" | "I";
}
}
Jeg fant ut at dette fungerer veldig godt for winston også.
