#typescript #vue.js #graphql-codegen #urql
Вопрос:
У меня есть компонент Vue 3, использующий Urql для запроса конечной точки Hasura graphql. Мне удалось заставить работать довольно простой запрос, и теперь я пытаюсь сделать тип компонента безопасным.
Я использую кодовый код graphql для создания типов, и он генерирует файл типов, но в результирующем сгенерированном файле возникают ошибки.
Я немного новичок в машинописи, поэтому надеюсь, что кто-нибудь сможет меня исправить. Я стремлюсь решить проблемы, о которых сообщается в сгенерированном файле типов.
Я предоставил следующее:
- Копия рабочего компонента ListTodos.vue.
- Исправленная копия сгенерированного файла типов (graphql.d.ts). Ошибка возникает в строках 975-989, поэтому я предоставил короткую версию файла только с соответствующими строками.
- Копия сообщенных ошибок
- Копия моей codegen.js файл конфигурации.
Любые предложения приветствуются.
1. ListTodos.vue
lt;script setup lang="ts"gt; import { useQuery, gql } from '@urql/vue' const FETCH_TODOS = gql` query { todos { title user { name } is_public } } ` const result = useQuery({ query: FETCH_TODOS }) lt;/scriptgt; lt;templategt; lt;div v-if="result.fetching.value"gt;Loading..lt;/divgt; lt;div v-else-if="result.error.value"gt;{{ result.error.value }}lt;/divgt; lt;div v-elsegt; lt;ulgt; lt;li v-for="todo of result.data.value.todos"gt; lt;h4gt;{{ todo.title }}lt;/h4gt; lt;pgt;{{ todo.user.name }}lt;/pgt; lt;/ligt; lt;/ulgt; lt;/divgt; lt;/templategt;
2. Сгенерированные типы (абревиатурные), показывающие подчеркивание ошибки
3. Ошибки
4. Codegen.js файл конфигурации
module.exports = { overwrite: true, generates: { './src/generated/graphql.d.ts': { schema: [ { 'https://sample-backend-for-hasura-tutorial.hasura.app/v1/graphql': { headers: { 'x-hasura-role': 'admin', 'x-hasura-admin-secret': 'secret', }, }, }, ], documents: ['./src/**/*.vue'], plugins: ['typescript', 'typescript-operations', 'typescript-vue-urql'], config: { preResolveTypes: true, skipTypename: false, enumsAsTypes: true, constEnums: true, }, }, }, }
Комментарии:
1. Я немного продвинулся вперед…
2. добавил «noGraphQLTag: true» в конец приведенной выше конфигурации (несмотря на то, что она устарела), и проблема с тегом gql исчезла
3. Заменено на: экспорт документа const = {«kind»:»Document»,»definitions»:[{«kind»:»OperationDefinition»,»operation»:»query»,»selectionSet»:{«kind»:»SelectionSet»,»selections»:[{«kind»:»Field»,»name»:{«kind»:»Name»,»value»:»todos»},»selectionSet»:{«kind»:»SelectionSet»,»selections»:[{«kind»:»Field»,»name»:{«kind»:»Name»,»value»:»title»}},{«kind»:»Field»,»name»:{«kind»:»Name»,»value»:»user»},»selectionSet»:{«kind»:»SelectionSet»,»selections»:[{«kind»:»Field»,»name»:{«kind»:»Name»,»value»:»name»}}]}},{«kind»:»Field»,»name»:{«kind»:»Name»,»value»:»is_public»}}]}}]}}]} так же неизвестно, как и DocumentNode;
4. Приведенная выше инструкция выдает следующую ошибку: Инициализатор ‘const’ в окружающем контексте должен быть строковым или числовым литералом или ссылкой на буквенное перечисление.ts(1254), а также последние 4 ошибки, показанные выше
Ответ №1:
Хорошо, кажется, я решил проблему.
Я удалил плагин «typescript-vue-urql» из конфигурации, который кажется интуитивно понятным, но сгенерированный файл тогда не имел проблем.
Я также добавил имя для запроса, затем импортировал это «имя» из файла типов, а затем ввел функцию useQuery.