Я создаю приложение Angular, которое отправляет вызовы API. Это один из методов AuthService (отвечает за аутентификацию пользователя):
login(loginForm: UserLoginRequest): Observable<AuthenticationResponse | TfaResponse> {
return this.http.post<AuthenticationResponse | TfaResponse>('api/auth/login', loginForm);
}
Эти методы возвращают Observable с одним из следующих ответов:
export class AuthenticationResponse {
token: string;
refreshToken: string;
}
export class TfaResponse {
requiresTwoFactor: boolean;
isTwoFactorConfigured: boolean;
}
Затем я подписываюсь на этот Observable в мой компонент и я хотим выполнять разные действия в зависимости от типа ответа:
this.authService.login(userLoginForm)
.subscribe(
(result) => {
// type of result is AuthenticationResponse
if (*type check*) {
// action with AuthenticationResponse
}
// type of result is TfaResponse
else if (*type check*) {
// action with TfaResponse
}
},
);
В данный момент я просто проверяю, владеет ли объект некоторыми свойствами из этого класса, например:
this.authService.login(userLoginForm)
.subscribe(
(result) => {
if ('token' in result) {
// action with AuthenticationResponse
}
else if ('requiresTwoFactor' in result) {
// action with TfaResponse
}
},
);
Но я понимаю, что это определенно плохое решение, которое развалится после первого изменения в классе AuthenticationResponse или TfaResponse. Как мне проверить класс в этом случае?