Javascript 在TypeScript中使用可选参数调用函数

Javascript 在TypeScript中使用可选参数调用函数,javascript,node.js,typescript,Javascript,Node.js,Typescript,我正在尝试修补graphqlci的getschema函数,以便使用注释打印描述。我分叉了库[并编辑了src/cmds/get schema.ts: printSchema(newschema结果为GraphQLSchema) 变成 printSchema(新闻模式结果为GraphQLSchema,{commentDescriptions:true}) 当我运行npm安装时,tsc不喜欢我的干预 src/cmds/get schema.ts(194,11):错误TS2554:应为1个参数,但得到2

我正在尝试修补
graphqlci
getschema
函数,以便使用注释打印描述。我分叉了库[并编辑了
src/cmds/get schema.ts

printSchema(newschema结果为GraphQLSchema)

变成

printSchema(新闻模式结果为GraphQLSchema,{commentDescriptions:true})

当我运行npm安装时,
tsc
不喜欢我的干预

src/cmds/get schema.ts(194,11):错误TS2554:应为1个参数,但得到2个。

现在我真的不理解这个错误,因为当我查看
node\u modules/graphql/utilities/schemaPrinter.js.flow
时,我看到函数签名清楚地指示了第二个可选参数

type Options = {| commentDescriptions?: boolean |};

export function printSchema(schema: GraphQLSchema, options?: Options): string
我尝试使用
undefined
作为第二个参数,但仍然得到相同的错误。我阅读了ts文档,这是定义可选参数的正确语法,即使它是在flow中编写的

这是由flow和typescript混合引起的吗

typescript是如何得到参数列表的?我遍历了导入链,它指向了上面的定义

我遗漏了什么?有解决办法吗


谢谢

您正在查看的是流类型注释。它们与TypeScript为库的键入选择的内容无关。对于
graphql
而言,键入实际上来自社区托管的键入存储库,您可以在此处找到:

当您查看要使用的函数的类型时,您可以看到,没有添加第二个参数,因此TypeScript对此一无所知:


因此,为了让TypeScript正确地知道第二个参数,您必须将其添加到DefiniteTyped上的typings文件中。

TypeScript类型没有指定
选项
参数:

所以看起来,正如您所怀疑的,流量和TS之间存在差异

您可以考虑使用手动覆盖TS键入来为
printSchema
方法定义自己的签名。您必须确保
printSchema
方法确实接受第二个
options
参数。可能流键入已过时