Без твоего APIClass
определения мне придется придумывать что-нибудь по ходу дела. Основная проблема здесь заключается в том, что если APIClass
необходимо отслеживать, является ли это тип верблюжьего или змеиного типа, это различие должно быть частью самого типа класса. Я бы сделал это, сделав APIClass
generic в соответствующем логическом типе:
class APIClass<B extends boolean> {
constructor(
public username: string,
public password: string,
public options: { camelcaseKeys: B }
) {}
public async login() {}
public getLoginInfo(): B extends true
? camelType
: snake_type {
return null!; // implement me later
}
}
Так что теперь тип возврата getLoginInfo()
будет зависеть от B
в путиВы хотите:
const api = new APIClass("username", "password", { camelcaseKeys: true });
(async () => {
await api.login();
let result = api.getLoginInfo(); // cameltype
})();
Обратите внимание, что значения условных типов, таких как B extends true ? camelType : snake_type
, просты в использовании, когда вы знаете, что такое B
, и сложнее в использовании, если B
все еще является неразрешенным универсальным типом. параметр. Так что реализация из getLoginInfo()
может потребовать от вас использования некоторых утверждений типа или чего-то подобного, чтобы убедить компилятор, что возвращаемая вещь соответствует типу. Но вы не спрашиваете о реализации, поэтому я оставлю это там.
Хорошо, надеюсь, это поможет;удачи!
Ссылка на код