声明Angular 2 / typescript中的javascript方法,以避免错误x不存在错误

时间:2016-10-25 12:37:19

标签: javascript angular typescript declare mixpanel

我在Angular 2,TypeScript项目中使用了一些JavaScript。 例如,我使用具有javascript文件的MixPanel和一些看起来像这样的方法:

mixpanel.people.set({
    "$first_name": "Joe",
    "$last_name": "Doe",
    "$created": "2013-04-01T09:02:00",
    "$email": "joe.doe@example.com"
});

和此:

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

调用此方法有效,但是typescript找不到此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来解决这个问题?或者,如果有更好的解决方案?

2 个答案:

答案 0 :(得分:3)

declare var mixpanel:any; 

可以解决您的所有问题;

答案 1 :(得分:1)

为MixPanel创建一个自己的类,如:

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

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