我尝试修补graphql-cli
的{{1}}功能,以便使用评论打印说明。我分叉了库[https://github.com/poernahi/graphql-cli]并编辑了get-schema
:
src/cmds/get-schema.ts
变为
printSchema(newSchemaResult as GraphQLSchema)
当我运行printSchema(newSchemaResult as GraphQLSchema, {commentDescriptions: true})
时,npm install
不喜欢我的插手......
tsc
现在我真的不明白这个错误,因为当我查看src/cmds/get-schema.ts(194,11): error TS2554: Expected 1 arguments, but got 2.
时,我看到函数签名清楚地表明了第二个可选参数。
node_modules/graphql/utilities/schemaPrinter.js.flow
我尝试使用type Options = {| commentDescriptions?: boolean |};
export function printSchema(schema: GraphQLSchema, options?: Options): string
作为第二个参数并仍然得到相同的错误。我阅读了ts文档,这是定义可选参数的正确语法,即使它是用流写的。
这是由混合流和打字稿引起的吗?
打字稿是如何获得参数列表的?我走过了进口链,它指出了上面的定义。
我错过了什么?任何解决方法?
由于
答案 0 :(得分:2)
您正在查看的是流类型注释。它们无关,TypeScript选择了库的类型。在graphql
的情况下,输入实际上来自社区托管的输入存储库,您可以在此处找到:https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/graphql
当您查看要使用的函数的类型时,您可以看到第二个参数未添加,因此TypeScript对此一无所知:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/graphql/utilities/schemaPrinter.d.ts#L4
因此,为了让TypeScript正确地知道第二个参数,你必须在DefinitelyTyped上将它添加到typings文件中。
答案 1 :(得分:1)
TypeScript类型未指定options
参数:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/graphql/utilities/schemaPrinter.d.ts#L4
所以看起来你怀疑Flow与TS之间存在差异。
您可以使用declaration merging手动覆盖TS类型,以便为printSchema
方法定义自己的签名。您必须确保printSchema
方法确实接受第二个options
参数。也许流量类型已经过时了?