2016-10-25 3 views
0

Я использую JavaScript в моем проекте Angular 2, TypeScript. Например, я использую MixPanel, которые имеют файла JavaScript и некоторые методы, которые выглядят следующим образом:объявить javascript методы в Angular 2/typescript, чтобы избежать прав x не существует ошибок

mixpanel.people.set({ 
    "$first_name": "Joe", 
    "$last_name": "Doe", 
    "$created": "2013-04-01T09:02:00", 
    "$email": "[email protected]" 
}); 

и это:

mixpanel.track("Video played", { 
     "Video length": 213, 
     "id": "hY7gQr0" 
    }); 

Вызов эти методы работают, но машинописный не может найти никаких определений этого mixpanel, поэтому он выдает ошибки. Это проблематично, потому что я не могу скомпилировать с этими ошибками ...

Поэтому я использую эту маленькую хитрость, чтобы объявить mixpanel как это:

import { Injectable } from '@angular/core'; 

declare var mixpanel: { 
    track(event: string, data: any): void; 
    identify(data: any): void; 
    people(data: any): void; 
    track_links(domQuery: string, eventName: string, properties: any): void; 
}; 

@Injectable() 
export class MixPanelService { 

    constructor() { } 

    public track(event: string, data: any) { 
    mixpanel.track(event, data); 
    } 

    public track_links(domQuery: string, eventName: string, properties: any) { 
    mixpanel.track_links(domQuery, eventName, properties); 
    } 

    public identify(id: string) { 

    mixpanel.people.set({ <---- ERROR: Property 'set' does not exist on type '(data: any) => void'.at line 37 col 21 
     '$first_name': id 
    }); 
    mixpanel.identify(id); 

    } 
} 

Я объявляющий mixpanel.people, но не mixpanel.people.set. Это вызывает ошибку.

Кто-нибудь знает, как я должен объявить mixpanel var, чтобы исправить это? Или если есть лучшее решение?

+0

Это может быть, я считаю, глядя на дефис. Можете ли вы поместить здесь ошибки? – Gary

ответ

1

Сделать свой собственный класс для MixPanel, как:

export class MixPanel 
{ 
    track(event: string, data: any): void 
    { 
    } 

    identify(data: any): void 
    { 
    } 
    ... 
}