Я пытаюсь создать массив значений всех ключей внутри объекта, используя Object.values(obj)
работает, но выдает следующую ошибку:
No overload matches this call.
Overload 1 of 2, '(o: { [s: string]: string; } | ArrayLike<string>): string[]', gave the following error.
Argument of type 'SocialMedia | undefined' is not assignable to parameter of type '{ [s: string]: string; } | ArrayLike<string>'.
Type 'undefined' is not assignable to type '{ [s: string]: string; } | ArrayLike<string>'.
Overload 2 of 2, '(o: {}): any[]', gave the following error.
Argument of type 'SocialMedia | undefined' is not assignable to parameter of type '{}'.
Type 'undefined' is not assignable to type '{}'.ts(2769)
Вот код с типом объекта:
{
Object.values(data?.socialMedia).map((social) => (
<div key = {social} className = "cursor-pointer">
{renderSocial(social)}
</div>
));
}
export type SocialMedia = {
fb: string;
insta: string;
twitter: string;
};
Я пытался явно использовать data.?socialMedia
как объект, но это не сработало. Я пробовал обходной путь с помощью простого цикла for, но он тоже не работает.
data?.socialMedia
даст undefined
, если data
ложно. И Object.values()
ожидать объект в качестве параметра; это ошибка, которую вы получаете. Вы можете исправить это, выполнив следующие действия:
{data ? (
Object.values(data.socialMedia).map((social) => (
<div key = {social} className = "cursor-pointer">
{renderSocial(social)}
</div>
))
) : (
<></>
)}
data?.socialMedia
может бытьundefined
иObject.values
не может получитьundefined