У меня есть клиентское приложение React Typescript. И я читал, что хорошей практикой является создание интерфейсов для ответов, поступающих с конечных точек.
Например, схема GraphQL объявила этот тип:
type Author {
id: Int!
firstName: String!
lastName: String!
... {more fields}
posts(findTitle: String): [Post]
}
Так что на стороне клиента мне также нужно создать аналогичный интерфейс:
interface Post: {...}
interface IAuthor {
id: number;
firstName: string;
lastName: string;
posts: Post[]
}
И когда клиентское приложение получает ответ, оно просто передает ответ этому интерфейсу, например:
const data = await getWholeAuthorFromGraphQL();
const user = data as IUser;
Но мне не ясно, что GraphQL позволяет извлекать определенные поля вместо целого объекта.
Например, в другом месте приложения мне также необходим объект IUser
, но только с 2 полями: firstName
и secondName
. Должен ли я создать другой интерфейс в этом случае? Нравится:
interface AuthorFullname {
firstName: string;
lastName: string;
}
Или я могу просто привести к IUser
все, что относится к Author
GQL-типу? И тогда в коде я буду осторожен, потому что буду знать, что user
объект содержит только firstName
и lastName
. Поэтому я не буду использовать другие поля, кроме firstName
и lastName
.