2015-11-03 3 views
2

Я следующий фильтр в моей машинописи 1,5 + AngularJS 1 проект:машинописи + Угловые 1 + фильтр: Назначение типов

module Filters{ 

    export function percentage($filter:angular.IFilterService) { 

     return function(input: number, decimals: number): string{ 
      return $filter('number')(input * 100, decimals) + '%'; 
     } 

    } 


    var app = AppModule.getModule(); 
    app.filter("percentage", Filters.percentage); 
} 

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

С помощью следующего кода, я получаю следующее сообщение об ошибке во время компиляции:

error TS2345: Argument of type 'number' is not assignable to parameter of type '{}[]'. 
    Property 'length' is missing in type 'Number'. 

Который указывает мне на это в типизации:

interface IFilterService { 
    /** 
    * Usage: 
    * $filter(name); 
    * 
    * @param name Name of the filter function to retrieve 
    */ 
    (name: string): IFilterFunc; 
} 

interface IFilterFunc { 
    <T>(array: T[], expression: string | IFilterPatternObject | IFilterPredicateFunc<T>, comparator?: IFilterComparatorFunc<T>|boolean): T[]; 
} 

Однако, я не тихий уверен, что это вопрос. Есть идеи?

+0

Возможно, это поможет http://stackoverflow.com/a/33064403/99256. Однако я не могу как-то воспроизвести вашу проблему. –

ответ

2

Не знаете, какая версия типов, которые вы используете, но определение типов фильтров обновлено, так как в последних версиях 1.4+.

Так definition for filter специально обрабатывает тип фильтра вы проходите в с помощью перегрузок, это выглядит следующим образом:

interface IFilterService { 
    (name: 'filter'): IFilterFilter; 
    (name: 'currency'): IFilterCurrency; 
    (name: 'number'): IFilterNumber; 
    (name: 'date'): IFilterDate; 
    (name: 'json'): IFilterJson; 
    (name: 'lowercase'): IFilterLowercase; 
    (name: 'uppercase'): IFilterUppercase; 
    (name: 'limitTo'): IFilterLimitTo; 
    (name: 'orderBy'): IFilterOrderBy; 
    /** 
    * Usage: 
    * $filter(name); 
    * 
    * @param name Name of the filter function to retrieve 
    */ 
    <T>(name: string): T; 
} 

interface IFilterNumber { 
     /** 
     * Formats a number as text. 
     * @param number Number to format. 
     * @param fractionSize Number of decimal places to round the number to. If this is not provided then the fraction size is computed from the current locale's number formatting pattern. In the case of the default locale, it will be 3. 
     * @return Number rounded to decimalPlaces and places a “,” after each third digit. 
     */ 
     (value: number|string, fractionSize?: number|string): string; 
    } 

Updgrading в angular.d.ts должен решить проблему. Похоже, у вас есть версия с ошибками типов фильтров, которая была fixed during this merge.

+0

Спасибо! Я дам ему съемку, как только вернусь домой :) – uksz

+0

@uksz Конечно, пожалуйста. :) – PSL

+1

Это было :) спасибо! – uksz

Смежные вопросы