Я хочу, чтобы свойства моего основного класса были нулевыми до тех пор, пока пользователь не вызовет метод login()
. Я не могу поместить это в конструктор, так как это асинхронный метод.
Я знаю, что это включает добавление универсального свойства в класс, но у меня возникают проблемы с его правильной настройкой.
import api from "./api"
import {RSS, User} from "./endpoints"
type isLoggedIn<B extends boolean, T> = B extends true ? T : null
export default class MyApi<B extends boolean = false> {
private loggedIn: B
//This is needed for other properties, but you must login to get it
private accessToken: string
public rss: isLoggedIn<B, RSS>
public user: isLoggedIn<B, User>
//There are a lot more properties, but they generally look like this ^
constructor(private clientId: string, private clientSecret: string) {}
public login = async () => {
const auth = await api.get("oauth url", {client_id: this.clientId, client_secret: this.clientSecret, grant_type: "client_credentials"})
this.accessToken = auth.access_token
//With the accessToken, the other properties can be initialized
this.rss = new RSS(this.accessToken) as isLoggedIn<B, RSS>
this.user = new User(this.accessToken) as isLoggedIn<B, User>
this.loggedIn = true as B //???
}
}
Основная проблема заключается в том, что универсальный тип в классе никогда не становитсяtrue, он всегда остается по умолчанию (false). Я не знаю, как бы это сделать после запуска функции login()
.