Как объявить модуль для выполнения именованного импорта?

Я использую graphql-tag. Мои файлы такие.

./operation.graphql

Query User {
   ...
}

./test.ts

import { User } from './operation.graphql'; /// Module ''*.graphql'' has no exported member 'User'.

./index.d.ts

declare module '*.graphql' {
    import { DocumentNode } from 'graphql';

    const value:DocumentNode;

    export default value;
}

Приложение работает хорошо, но я хочу предотвратить эту ошибку.

Когда я делаю, импорт по умолчанию работает хорошо, но, как вы видите, я получил ошибку при именованном импорте.

Как это объявить? Благодарю.:)

1 ответ

Решение

Если имя экспорта, которое вы хотите, отличается для каждого файла GraphQL, TypeScript не будет анализировать ваш файл GraphQL, чтобы выяснить это автоматически. Либо вам нужно отдельное объявление модуля для каждого файла GraphQL (и вам необходимо установить baseUrl а также paths так что вы можете использовать не относительный импорт, или он может работать, чтобы d.ts файл вместе с каждым файлом GraphQL вместо использования declare module, Я не уверен):

declare module 'operation.graphql' {
    import { DocumentNode } from 'graphql';

    export const User: DocumentNode;
}

Или вы можете отказаться и позволить всем файлам GraphQL быть типа any:

declare module '*.graphql';
Другие вопросы по тегам