Подтвердить что ты не робот

Расширить интерфейс, определенный в файле .d.ts

В моем проекте TypeScript я использую DefinitelyTyped определения для внешних js-зависимостей.

Иногда бывает так, что эти определения устарели. Это может случиться и с некоторыми библиотеками, которые могут добавлять новые методы во время выполнения, например express-validator, в которых вы можете определить пользовательские функции проверки достоверности.

Поэтому я хотел бы расширить те определения .d.ts, добавляющие новые методы и/или свойства.

Итак, если у меня есть определенная определенность в express-validator.d.ts:

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

как я могу расширить интерфейс Validator внутри, например, my 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??
4b9b3361

Ответ 1

//Как расширить интерфейс Validator с помощью метода isArray()

Вы не можете сделать это в файле, который является модулем (некоторые рекомендации здесь), и ваш файл является модулем, потому что у вас есть import expressValidator.

Вместо этого создайте extendedValidator.d.ts и добавьте новый материал для механизма TypeScript:

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