2015-10-05 7 views
19

In meinem TypeScript-Projekt verwende ich DefinitelyTyped Definitionen für externe js Abhängigkeiten.Erweitern Sie die in der Datei .d.ts definierte Schnittstelle

Manchmal kann es vorkommen, dass diese Definitionen veraltet sind. Es kann auch vorkommen, dass einige Bibliotheken zur Laufzeit neue Methoden hinzufügen können, z. B. express-validator, in der Sie benutzerdefinierte Validatorfunktionen definieren können.

Daher würde ich gerne diese .d.ts Definitionen erweitern neue Methoden und/oder Eigenschaften hinzufügen.

Also, wenn ich meine DefinitelyTyped defininiton in express-validator.d.ts haben:

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

wie kann ich verlängern Validator Schnittstelle innerhalb zum Beispiel meine 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?? 

Antwort

20

// Wie Validator-Schnittstelle Hinzufügen isArray() -Methode verlängern ??

Sie kann dies nicht in einer Datei, die ein Modul (some guidance here) und die Datei ist ein Modul, weil Sie import expressValidator haben.

Statt eine extendedValidator.d.ts erstellen und die neuen Sachen für Typoskript des Motors hinzuzufügen:

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

Haben Sie etwas Bestimmtes mit der 'd.ts' Datei zu tun haben, wenn es erstellt wird? Ich habe das getan, aber ich bekomme immer noch den Fehler, dass meine neue Eigenschaft nicht existiert. Muss ich es an einem bestimmten Ort ablegen oder etwas anderes tun, damit es vom Compiler erkannt wird? – WillyC

+0

@basarat Müssen Sie die Schnittstelle "exportieren"? ist das erforderlich? Was passiert, wenn Sie nicht exportieren? –

+0

@MohamedNuur Sie müssen es exportieren, wenn Sie es öffentlich zugänglich machen möchten. –

Verwandte Themen