Как я могу опубликовать переданные данные без указания каждой переменной в Typescript

#javascript #reactjs #typescript #interface

#javascript #reactjs #typescript #интерфейс

Вопрос:

У меня есть интерфейс, который я использую в компоненте, но как я могу передать все эти данные одним реквизитом, таким как mainInfo = {User}, без указания каждой переменной. Я не хочу, чтобы объект done находился внутри Inteface для всех данных. Пользователь — это объект с другой информацией.

Интерфейс

 export interface MainInfo {
  id: number;
  firstName: string;
  lastName: string;
  age: number;
  country: string;
  speaks: Languages[];
  learn: Languages[];
  isOnline: boolean;
  isFriend: number;
  photoUrl: string;
}
  

Компонент, в котором я использую интерфейс

 import { MainInfo } from '../../interfaces/Interface';

export const UserCard: React.FC<MainInfo> = ( mainInfo ) => {
  

Как я передаю реквизиты

       <UserCard
        id={User.id}
        firstName={User.firstName}
        lastName={User.lastName}
        age={User.age}
        country={User.country}
        speaks={User.speaks}
        learn={User.learn}
        isOnline={User.isOnline}
        isFriend={User.isFriend}
        photoUrl={User.photoUrl}
      />
  

но могу ли я сделать что-то подобное?

       <UserCard
        mainInfo={User}
      />
  

Комментарии:

1. Да, вы можете сделать именно это, просто измените тип реквизита на { mainInfo: MainInfo } . Или просто распространить пользовательский объект, <UserCard {...User} /> .

Ответ №1:

    interface MainInfo {
      id: number;
      firstName: string;
      lastName: string;
      age: number;
      country: string;
      speaks: Languages[];
      learn: Languages[];
      isOnline: boolean;
      isFriend: number;
      photoUrl: string;
    }
    export interface IProps {
      mainInfo: MainInfo;
    }


import { IProps } from '../../interfaces/Interface';

export const UserCard: React.FC<IProps> = ( mainInfo ) => {
  

Комментарии:

1. Я бы сказал, что тип реквизита принадлежит компоненту, а не модели.

Ответ №2:

Это не зависит от TypeScript. То, что вы ищете, — это атрибуты распространения JSX, которые работают следующим образом:

 <UserCard {...User} />