Как вернуть конкретный тип на основе присутствия параметра функции в типографии?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как вернуть конкретный тип на основе присутствия параметра функции в типографии?

Сообщение Anonymous »

У меня есть общая функция, которая делает запросы в API и возвращает лицензионные данные. Но возврат этих данных в настоящее время является. /code> имеет z тип. Если я не передаю эту функцию, я хочу, чтобы данные имели тип y . Оба типа, которые я передаю в качестве дженериков.

Код: Выделить всё

interface FetchDataProps {
route: string;
tableFormattedData?: ({ data }: { data: unknown }) => object[];
}

export default async function fetchData({
route,
tableFormattedData,
}: FetchDataProps) {
const response = await api.get(route);

const { data, page, total_records } = response.data;

const currentPage = page - 1;

const newPaginationData = {
data: tableFormattedData
? tableFormattedData({
data,
})
: data,
page: currentPage,
totalCount: total_records,
};

return { newPaginationData, currentPage };
}
< /code>
Это то, что я делал, чтобы достичь того, что я хочу: < /p>
interface ResponseDataProps {
data: T[];
page: number;
total_records: number;
}

type FetchDataProps = {
route: string;
tableFormattedData?: (args: { data: DataProps[] }) => FormattedDataProps[];
};

type FetchDataReturn =
FormattedDataProps extends undefined
? {
newPaginationData: {
data: DataProps[];
page: number;
totalCount: number;
};
currentPage: number;
}
: {
newPaginationData: {
data: FormattedDataProps[];
page: number;
totalCount: number;
};
currentPage: number;
};

export async function fetchData({
route,
tableFormattedData,
}: FetchDataProps) {
const response = await api.get(route);
const { data, page, total_records } = response.data;
const currentPage = page - 1;

const newPaginationData = {
data: tableFormattedData
? tableFormattedData({
data,
})
: data,
page: currentPage,
totalCount: total_records,
};

return {
newPaginationData,
currentPage,
} as FetchDataReturn;
}
Интерфейс FormattedProps является только примером. Я пытался использовать это так: < /p>

Код: Выделить всё

interface FormattedProps {
id: string;
name: string;
}

interface DataProps {
id: string;
}

export async function test() {
const test2 = await fetchData({
route: 'test2',
tableFormattedData: () => {}
});

test2.newPaginationData.data[0].name;
}
< /code>
Если я попытаюсь получить доступ к имени, оно не будет найдено. Переменная Test3 
только показывает свойство идентификатора. Имя появляется только в том случае, если я сделаю что -то подобное.

Код: Выделить всё

export async function test() {
const test3 = await fetchData({
route: 'test3',
tableFormattedData: () => {}
});

if ('name' in test3.newPaginationData.data[0]){
test3.newPaginationData.data[0].name
}

}
Мой вопрос: как я могу убедиться, что тип возврата Test3 проверить?

Подробнее здесь: https://stackoverflow.com/questions/793 ... meter-in-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Javascript»