(<任何>窗口).SomeLibrary.SomeMethod(ARG1,ARG2)?

时间:2016-11-08 18:51:10

标签: javascript angular

在Angular2中使用时(<any>window)是什么?

我在研究Stripe支付库时找到了它:

(<any>window).Stripe.card.createToken({
  number: this.cardNumber,
  exp_month: this.expiryMonth,
  exp_year: this.expiryYear,
  cvc: this.cvc
}, (status: number, response: any) => {
  if (status === 200) {
    this.message = `Success! Card token ${response.card.id}.`;
  } else {
    this.message = response.error.message;
  }
});

http://blog.mgechev.com/2016/07/05/using-stripe-payment-with-angular-2/

看起来它可以让你在控制器中使用全局对象,但我并不真正理解细节。似乎无法找到其他答案。

2 个答案:

答案 0 :(得分:2)

<any>表示在TypeScript中进行强制转换,因此将window转换为any表示您不再受编译器绑定到它认为窗口对象的属性以及它的属性具有

(<any>window)阻止编译时类型错误检查将调用标记为无效。

答案 1 :(得分:2)

  

有时你最终会遇到更多关于a的事情   值比TypeScript的值。通常这会在你知道的时候发生   某个实体的类型可能比其当前类型更具体。

     

类型断言是一种告诉编译器的方式“相信我,我知道我是什么   做“。

它可能有两种形式:

(<any>window)

(window as any)

另见https://www.typescriptlang.org/docs/handbook/basic-types.html#type-assertions

另一种做同样事情的方法是使用Square bracket syntax

window['Stripe'].card...

在这种情况下,typescript编译器也可以正常工作