我需要泛化一个打字稿方法
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;
```
需要关于泛化打字稿方法的建议。检查下面我的方法。我需要减少方法中的代码行数。
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;
```