2014-05-10 64 views
0

的通用實現我試圖將here的實現移植到typescript 這可行,但我喜歡將它作爲通用fn,以及lodash _.indexOf implementation中的其他人。_.indexOf

indexOf<T>(
      array: Array<T>, 
      value: T): number; 

     /** 
     * @see _.indexOf 
     **/ 
     indexOf<T>(
      array: List<T>, 
      value: T): number; 

etc... 

我使用它現在這個樣子

var idx = _.indexOf(myList, (r:Type) => { 
     return r.Name == k; 
}); 

我正在尋找一種方法,可使用以下實施類似

var idx = _.indexOf<Type>(myList, (r) => { 
     return r.Name == k; 
}); 

類型化的實現:

var indexOfValue = _.indexOf; 

// using .mixin allows both wrapped and unwrapped calls: 
// _(array).indexOf(...) and _.indexOf(array, ...) 
_.mixin({ 

    // return the index of the first array element passing a test 
    indexOf: (array:_.List<any>, test:Function):any => { 
     // delegate to standard indexOf if the test isn't a function 
     if (!_.isFunction(test)) return indexOfValue(array, test); 
     // otherwise, look for the index 
     for (var x = 0; x < array.length; x++) { 
      if (test(array[x])) return x; 
     } 
     // not found, return fail value 
     return -1; 
    } 
}); 

回答

0

這是我寫的一段時間返回:

export function indexOf<T>(items: T[], filter: (item: T) => boolean): number { 
    for (var i = 0; i < items.length; i++) { 
     if (filter(items[i])) { 
      return i; 
     } 
    } 
}