2017-02-16 3 views
1

Я создал свои собственные расширения для массива, как показано ниже:массива прототип машинопись

export interface Func<T, TResult> { 
    (item: T): TResult; 
} 

declare global { 
    interface Array<T> { 
     where(predicate: Func<T, boolean>): Array<T>; 
     single(predicate: Func<T, boolean>): T; 
     first(predicate: Func<T, boolean>): T; 
     take(predicate: Func<T, boolean>, count: number): Array<T>; 
     countWhere(predicate: Func<T, boolean>): number; 
     count(): number; 
    } 
} 

Array.prototype.count = function <T>(): number { 
    return this.length; 
} 

//others 

В любом из моего компонента IntelliSense показывает мне эти методы как расширения, но при отладке я неопределенный, например:

events: Event[]; 
var result = this.events.count(); 

Где я должен применять методы Array, чтобы они могли быть видны из любого компонента?

+0

Связанный: http://stackoverflow.com/a/14034242/215552 –

+0

Вы загрузили модуль, который фактически создает эти методы в вашем отлаженном проекте? – Bergi

+0

Его в другом файле .ts У меня есть exportem этот файл в используемом компоненте – miechooy

ответ

0

Вот вещи, чтобы проверить ...

  1. ли содержащий файл расширений нагрузки
  2. ли он загружает в правильном порядке (то есть до того, как используется)

Открывают инструменты разработчика в вашем веб-браузере (обычно F12) и выберите вкладку «Сеть».

Example Network Tab (Stack Overflow)

Запустите приложение и проанализировать JavaScript-файлов, загрузку.

Вы можете проверить, что файл, содержащий ваши расширения Array, загружен - и что он загружен перед файлом, который зависит от этих расширений.

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