我需要泛化一个打字稿方法

I need to generialze a typescript method

需要关于泛化打字稿方法的建议。检查下面我的方法。我需要减少方法中的代码行数。

    if (authProvider === 'google') {
      const provider = new firebase.auth.GoogleAuthProvider();
      provider.setCustomParameters({
        prompt: 'select_account'
      });
      return provider;
    }
    if (authProvider === 'facebook') {
      const provider = new firebase.auth.FacebookAuthProvider();
      provider.setCustomParameters({
        prompt: 'select_account'
      });
      return provider;
    }
    if (authProvider === 'twitter') {
      const provider = new firebase.auth.TwitterAuthProvider();
      provider.setCustomParameters({
        prompt: 'select_account'
      });
      return provider;
    }
    if (authProvider === 'microsoft') {
      const provider = new firebase.auth.OAuthProvider('microsoft.com');
      provider.setCustomParameters({
        tenant: 'b7773erqqqfr5678'
      });
      return provider;
    }

I there any good way of writing method more efficiently.

您可以将条件替换为三元运算符。尝试以下

someFunc() {
  const provider = authProvider === 'google' 
    ? new firebase.auth.GoogleAuthProvider()
    : authProvider === 'facebook'
      ? new firebase.auth.FacebookAuthProvider()
      : new firebase.auth.TwitterAuthProvider();
  
  provider.setCustomParameters({ prompt: 'select_account' });
  return provider;
}

更新

someFunc() {
  const provider = authProvider === 'google'
    ? { provider: new firebase.auth.GoogleAuthProvider() }
    : authProvider === 'facebook'
      ? { provider: new firebase.auth.FacebookAuthProvider() }
      : authProvider === 'twitter'
        ? { provider: new firebase.auth.TwitterAuthProvider() }
        : { provider: new firebase.auth.OAuthProvider('microsoft.com'), tenant: 'b7773erqqqfr5678' }

  (!!provider.tenant)
    ? provider.provider.setCustomParameters({ tenant: provider.tenant })
    : provider.provider.setCustomParameters({ prompt: 'select_account' })

  return provider.provider;
}

你可以使用 switch case 而不是嵌套的 eg

         const provider
         switch(authProvider) {
        
         case 'google'
           provider = new firebase.auth.GoogleAuthProvider();
         case 'facebook'
           provider = new firebase.auth.FacebookAuthProvider();
         case 'twitter'
           provider = new firebase.auth.TwitterAuthProvider();
         case 'microsoft'
           provider = new firebase.auth.OAuthProvider('microsoft.com');
        }
        
        provider.setCustomParameters({
                prompt: 'select_account'
              });
         return provider;
        ```