2015-11-03 54 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應該解決您的問題。看起來像你有一個版本,有buggy過濾器類型是fixed during this merge

+0

謝謝!一旦我回家,我會給它一個拍攝:) – uksz

+0

@uksz當然,歡迎您。 :) – PSL

+1

就是這樣:)謝謝! – uksz