У меня есть сервер GraphQL (GQL), и я использую TypeScript (TS) на внешнем интерфейсе. Вот мой тип GQL.
type AutomatedAlgorithmValue {
politicalEntityAlgorithmValueId: Long
politicalEntityId: Long!
...
}
politicalEntityId
не может быть нулевым. Это дает мне поведение, если я запрашиваю politicalEntityId
, тогда он гарантированно будет там, но если я не запрашиваю его, запрос выполняется как обычно.
Я использую graphql-codegenerator для создания типов TS из схемы GQL. Типы TS делают politicalEntityId
ненулевым, поэтому теперь на внешнем интерфейсе я всегда должен запрашивать politicalEntityId
как часть типа AutomatedAlgorithmValue
, даже если это не то, что я хочу запрашивать.
В моем внешнем коде я храню данные в ловушке
let [results, setResults] = useState<AutomatedAlgorithmValue[]>([]);
Вот мой запрос GQL
executeAutomatedAlgorithmProcess(politicalEntityId: $id, type: $type) {
values {
politicalEntityAlgorithmValueId
}
}
На данный момент мне не нужен politicalEntityId
, но когда я пытаюсь добавить данные в свой results
, компилятор TS знает, что я добавляю null
для свойства non-null
politicalEntityId
, и возникает ошибка.
Еще хуже, если есть объект non-null
с другими свойствами non-null
, потому что теперь запрос становится все больше и больше с каждым ненужным свойством/объектом non-null
.
Как другие справляются с этим? Должен ли я каждый раз создавать новый тип? Нужно ли использовать Pick
, чтобы определить, какие данные будут в results
hook
? Есть ли плагин, который делает все обнуляемым, и если да, то должен ли я его использовать?
data
? - person xadm   schedule 14.01.2021