#typescript
Вопрос:
У меня есть это:
типы/PretaxAccount.ts
export default interface PretaxAccount {
account_info: object[];
available_balance: string;
display_options: string;
account_type: string;
submit_claims_last_date: string;
effective_date: string;
}
import PretaxAccount from 'types/PretaxAccount';
const getPretaxAccount = async ({
account_type,
flex_account_id,
}: {
account_type: string;
flex_account_id: string;
}) => {
const {
data: { account_detail_info: account }, // <---- notice how I'm renaming the property to "account"
} = await PretaxAccountApi.fetchAccountDetail({
account_id: flex_account_id,
account_type,
});
return { account };
};
Я пытаюсь перевести значение account
ключа в счет до вычета налогов. Как бы я это сделал? PretaxAccountApi.fetchAccountDetail-это запрос axios, если это поможет.
Ответ №1:
Вы не можете объявлять типы в левой части назначения при использовании деструктурирования. Для этого просто нет синтаксиса.
Но в идеале PretaxAccountApi.fetchAccountDetail
вернул бы правильный тип, и вам не нужно было бы ничего записывать. Обычно требуется деструктировать значения с помощью строго типизированных фигур. Тогда Typescript просто делает правильные вещи без каких-либо дополнительных типов.
Если по какой-либо причине это невозможно, вы можете сначала сохранить результат в типизированной переменной:
const result: { data: { account_detail_info: PretaxAccount } } =
await PretaxAccountApi.fetchAccountDetail({
account_id: flex_account_id,
account_type,
});
const {
data: { account_detail_info: account },
} = result
Ответ №2:
В TypeScript вы можете использовать ключевое слово as или оператор <><> для приведения типов.
Вы можете найти краткое руководство с дополнительной информацией здесь, если вам интересно.
НО на самом деле я не думаю, что приведение типов необходимо для того, что вы пытаетесь сделать, учитывая, что значение учетной записи соответствует интерфейсу предварительного учета.
Вы собираетесь перевести учетную запись на счет до налогообложения и вернуть ее? Если это так, вы можете отбросить {}.
return account;
Ваша проблема, скорее всего, связана с тем, что в возвращаемом значении у вас были скобки вокруг { account}. Я бы рекомендовал опустить скобки и добавить тип возвращаемого значения для функции «PretaxAccount», если это ваше намерение.
Кроме того, я бы выделил ваше определение параметров в отдельный интерфейс для удобства чтения. Личные предпочтения, но я думаю, что это немного легче читать, как это:
interface AccountIdInfo {
account_type: string;
flex_account_id: string;
}
const getPretaxAccount = async (accountIdInfo: AccountIdInfo): PretaxAccount => {
const { account_type, flex_account_id } = accountIdInfo;
const {
data: { account_detail_info: account }, // <---- notice how I'm renaming the property to "account"
} = await PretaxAccountApi.fetchAccountDetail({
account_id: flex_account_id,
account_type,
});
return account;
};