打字稿-检查是否定义了已清除的变量

时间:2019-02-16 18:39:04

标签: angular typescript variables scope fbsdk

我在项目中使用angular 7.0.4。在我的组件中,我在declare var FB: any;之前声明了这样的变量@Component({...})

declare var FB: any;
  @Component({
    selector: 'app-login-modal',
    templateUrl: './login-modal.component.html',
    styleUrls: ['./login-modal.component.css']
  })
  export class LoginModalComponent implements OnInit {

    private fbAuth;
    constructor() { }

    ngOnInit(): void {
        if (FB) {
           FB.getLoginStatus((r) => {
               if (r.authResponse) {
                    this.fbAuth = r.authResponse;
                    console.log('Loggedin with facebook');
                }
            });
        }
    }

问题:有时可以工作,但有时会出现错误ERROR ReferenceError: FB is not defined。我认为这是因为fb-sdk不在加载中,或者是在一段时间后加载的。

我的问题:有没有办法检查打字稿中是否定义了变量?

预先感谢

1 个答案:

答案 0 :(得分:1)

首先,您可能应该弄清楚为什么未定义FB。 ;)

您声明的方式假定它是在全局范围内声明的,但是如果不是,则JS will raise an error in strict mode。您可以改为将其声明为Window对象的成员,这将使您检查是否已定义,而JS没有引发错误:

// in a `global.d.ts` file:
interface Window {
  FB?: any;
}
ngOnInit() {
  if (window.FB) {
    // ...
  }
}