GraphQL Nexus Schema (nexusjs) 不使用标量类型进行编译
GraphQL Nexus Schema (nexusjs) doesn't compile with scalar types
我正在尝试关注 documentation on the Nexus-Schema (nexusjs) 网站以将标量类型添加到我的 GraphQL 应用程序。
我尝试使用文档中提供的示例和交互式示例将许多不同的实现添加到我的 src/types/Types.ts
文件中。我的尝试包括:
没有第三方库:
const DateScalar = scalarType({
name: 'Date',
asNexusMethod: 'date',
description: 'Date custom scalar type',
parseValue(value) {
return new Date(value)
},
serialize(value) {
return value.getTime()
},
parseLiteral(ast) {
if (ast.kind === Kind.INT) {
return new Date(ast.value)
}
return null
},
})
使用 graphql-iso-date
第 3 方库:
import { GraphQLDate } from 'graphql-iso-date'
export const DateTime = GraphQLDate
使用graphql-scalars
第3方库(如ghost example所示):
export const GQLDate = decorateType(GraphQLDate, {
rootTyping: 'Date',
asNexusMethod: 'date',
})
我在对象定义中使用这个新的标量类型,如下所示:
const SomeObject = objectType({
name: 'SomeObject',
definition(t) {
t.date('createdAt') // t.date() is supposed to be available because of `asNexusMethod`
},
})
在所有情况下,这些类型都从类型文件中导出并导入到 makeSchema
的 types
属性.
import * as types from './types/Types'
console.log("Found types", types)
export const apollo = new ApolloServer({
schema: makeSchema({
types,
...
context:()=>(
...
})
})
上面的 console.log
语句确实表明类型文件中声明的 const
s 在范围内:
Found types {
GQLDate: Date,
...
}
如果我 运行 应用程序处于开发模式,一切都会启动并且 运行 没问题。
ts-node-dev --transpile-only ./src/app.ts
但是,每当我尝试编译应用程序以部署到服务器时遇到错误
ts-node ./src/app.ts && tsc
注意:此错误发生在 运行ning 刚好 ts-node ./src/app.ts
到达 tsc
之前
构建过程中显示的错误如下:
/Users/user/checkouts/project/node_modules/ts-node/src/index.ts:500
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
src/types/SomeObject.ts:11:7 - error TS2339: Property 'date' does not exist on type 'ObjectDefinitionBlock<"SomeObject">'.
11 t.date('createdAt')
有没有人对此有任何想法:
- a) 我该如何解决这个错误?虽然长期解决方案是理想的,但临时解决方案也将受到赞赏。
- b) 我可以遵循任何步骤来调试此错误?或者关于如何获取额外信息以协助调试的想法?
非常欢迎任何帮助。谢谢!
将 --transpile-only
标志添加到 nexus:reflect 命令后,问题似乎已解决。
这意味着反射命令更新为:
ts-node --transpile-only ./src/app.ts
构建命令更新为:
env-cmd -f ./config/.env ts-node --transpile-only ./src/app.ts --nexusTypegen && tsc
还创建了一个 github 问题,可以在此处查看:https://github.com/graphql-nexus/schema/issues/690
我正在尝试关注 documentation on the Nexus-Schema (nexusjs) 网站以将标量类型添加到我的 GraphQL 应用程序。
我尝试使用文档中提供的示例和交互式示例将许多不同的实现添加到我的 src/types/Types.ts
文件中。我的尝试包括:
没有第三方库:
const DateScalar = scalarType({
name: 'Date',
asNexusMethod: 'date',
description: 'Date custom scalar type',
parseValue(value) {
return new Date(value)
},
serialize(value) {
return value.getTime()
},
parseLiteral(ast) {
if (ast.kind === Kind.INT) {
return new Date(ast.value)
}
return null
},
})
使用 graphql-iso-date
第 3 方库:
import { GraphQLDate } from 'graphql-iso-date'
export const DateTime = GraphQLDate
使用graphql-scalars
第3方库(如ghost example所示):
export const GQLDate = decorateType(GraphQLDate, {
rootTyping: 'Date',
asNexusMethod: 'date',
})
我在对象定义中使用这个新的标量类型,如下所示:
const SomeObject = objectType({
name: 'SomeObject',
definition(t) {
t.date('createdAt') // t.date() is supposed to be available because of `asNexusMethod`
},
})
在所有情况下,这些类型都从类型文件中导出并导入到 makeSchema
的 types
属性.
import * as types from './types/Types'
console.log("Found types", types)
export const apollo = new ApolloServer({
schema: makeSchema({
types,
...
context:()=>(
...
})
})
上面的 console.log
语句确实表明类型文件中声明的 const
s 在范围内:
Found types {
GQLDate: Date,
...
}
如果我 运行 应用程序处于开发模式,一切都会启动并且 运行 没问题。
ts-node-dev --transpile-only ./src/app.ts
但是,每当我尝试编译应用程序以部署到服务器时遇到错误
ts-node ./src/app.ts && tsc
注意:此错误发生在 运行ning 刚好 ts-node ./src/app.ts
到达 tsc
构建过程中显示的错误如下:
/Users/user/checkouts/project/node_modules/ts-node/src/index.ts:500
return new TSError(diagnosticText, diagnosticCodes)
^
TSError: ⨯ Unable to compile TypeScript:
src/types/SomeObject.ts:11:7 - error TS2339: Property 'date' does not exist on type 'ObjectDefinitionBlock<"SomeObject">'.
11 t.date('createdAt')
有没有人对此有任何想法:
- a) 我该如何解决这个错误?虽然长期解决方案是理想的,但临时解决方案也将受到赞赏。
- b) 我可以遵循任何步骤来调试此错误?或者关于如何获取额外信息以协助调试的想法?
非常欢迎任何帮助。谢谢!
将 --transpile-only
标志添加到 nexus:reflect 命令后,问题似乎已解决。
这意味着反射命令更新为:
ts-node --transpile-only ./src/app.ts
构建命令更新为:
env-cmd -f ./config/.env ts-node --transpile-only ./src/app.ts --nexusTypegen && tsc
还创建了一个 github 问题,可以在此处查看:https://github.com/graphql-nexus/schema/issues/690