如果我理解正确,但有两个问题/答案,即你缺少两件事
-
A)关于如何生成/模块化
graphql queries
- & B)如何
fix 那些用于打字稿的compiler errors 你正在拥有。
让我们开始吧,请考虑答案及其子选项...
答案 A:
Resuse/Modularize-- 为您的GraphQl 查询生成/创建打字稿模块/组件,您可以使用 3 个选项,即
选项 1:有一个内置的生成器,您可以结合 webpack 使用来简化事情。
generates: src/api/user-service/queries.d.ts
documents: src/api/user-service/queries.graphql
plugins:
- typescript-graphql-files-modules
config:
# resulting module definition path glob: "*\/api/user-service/queries.graphql"
modulePathPrefix: "/api/user-service/"
- B,简而言之.. 它允许您在
my-query.graphql 文件中创建一个名为 MyQuery 的查询,此模板将生成以下代码:
declare module '*/my-query.graphql' {
import { DocumentNode } from 'graphql';
const MyQuery: DocumentNode;
export { MyQuery };
export default defaultDocument;
}
Accordingly, you can import the generated types and use it in your code:
import myQuery from './my-query.graphql';
// OR
import { myQuery } from './my-query.graphql';
选项 2 更简单,例如
简单的形式,我建议使用webpack loader 来喂你的webpack config apollo
loaders: [
{
test: /\.(graphql|gql)$/,
exclude: /node_modules/,
loader: 'graphql-tag/loader'
}
]
在您的 queries.graphql 中避免使用双引号和特殊字符
query GetAllRoles($value: String) {
Role(filter: { role: $value }) {
role
}
}
现在,您可以在查询值中重复使用它
import GetAllRoles from './queries.graphql'
.....
this.apollo.query({
query: GetAllRoles,
variables: {
value: GetAllRoles,
}
})
.subscribe(....)
更多关于模块创建的示例和详细信息,resolvers here 可以帮助您
答案 B:
修复你面临的Typescript compiler errors
首先,graphql 的 typescript definitions/类型是 missing,您必须手动配置/添加/扩展 Typescript 定义。
// in your webpack.d.ts
declare module "*.gql" {
const content: any;
export default content;
}
declare module "*.graphql" {
const content: any;
export default content;
}
其次,如果还是不能解决问题,也请尝试在tsconfig.json 中添加此内容,以防止 typescript 编译器将模块类型应用于导入的 javascript。
// in your tsconfig.json
{
"compilerOptions": {
...
"allowJs": true,
"checkJs": false,
...
}
}