#javascript #reactjs #typescript
#javascript #reactjs #typescript
Вопрос:
Не уверен, как исправить эту синтаксическую ошибку TS:
Interfaces.tsx:
export interface Company {
name: string;
}
FeaturedCompanies.tsx:
import React, { useEffect, useState } from 'react';
import { Company } from '../Interfaces/Interfaces';
const FeaturedCompanies = () => {
const [companies, setData] = useState({ companies: [] });
const featuredCompanies: Array<Company> = [
{ name: 'Sony' },
{ name: 'Nike' },
{ name: 'Lowes' },
{ name: 'Home Depot' },
{ name: 'Adidas' },
];
useEffect(() => {
setData({ companies: featuredCompanies });
}, []);
return (
<div>
{companies.map((company) => <div data-testid="company">{company.name}</div>)}
</div>
);
};
export default FeaturedCompanies;
Ошибка: свойство ‘map’ не существует для типа ‘{ companies: any[]; }’
Комментарии:
1. Ваши компании — это объект с ключом
companies
, поэтому вы должны это сделатьcompanies.companies.map ...
.
Ответ №1:
Вы сохраняете в состоянии объект с компаниями, я считаю, что самым простым решением было бы заменить
const [companies, setData] = useState({ companies: [] });
с
const [companies, setData] = useState([]);
и измените useEffect на:
setData(featuredCompanies);
Ответ №2:
Попробуйте приведенный ниже код :-
import React, { useEffect, useState } from 'react';
import { Company } from '../Interfaces/Interfaces';
const FeaturedCompanies = () => {
const [companies, setData] = useState<Company>([]);
const featuredCompanies: Company[] = [
{ name: 'Sony' },
{ name: 'Nike' },
{ name: 'Lowes' },
{ name: 'Home Depot' },
{ name: 'Adidas' },
];
useEffect(() => {
setData(featuredCompanies);
}, []);
return (
<div>
{companies.map((company) => <div data-testid="company">{company.name}</div>)}
</div>
);
};
export default FeaturedCompanies;