【问题标题】:Binding element 'req' implicitly has an 'any' type绑定元素“req”隐式具有“任何”类型
【发布时间】:2021-01-18 06:21:50
【问题描述】:

在 type-graphql 中实现 autchChecker 时遇到问题

这是我的构建模式函数:

const schema = await buildSchema({
    resolvers: [SomeResolvers],
    authChecker: ({ context: {req} }) => {

        return !!req.session.uuid;
      }
  });

我得到的错误是帖子的确切标题。

我尝试过这样做:

const schema = await buildSchema({
    resolvers: [SomeResolvers],
    authChecker: ({ context: ({req}:any)  }) => {

        return !!req.session.uuid;
      }
  });

但不幸的是,ts 编译器会对我大吼大叫:

... 不能分配给类型 AuthChecker

如果它对你有帮助,这是我的 apolloserver 实例:

const apolloServer = new ApolloServer({schema, context: ({req}:any) => ({req})});

感谢您的帮助!

【问题讨论】:

  • 如果使用非解构参数authChecker: x =>... x的类型是什么?此外,您应该在创建服务器时找到any。这真是太糟了!应该是const apolloServer = new ApolloServer({schema, context: ({req}) => ({req})});

标签: typescript typegraphql


【解决方案1】:

我对这个包不是很熟悉,但我可以从 Typescript 方面给你一些建议。

AuthChecker 类型有两个泛型:AuthChecker<ContextType = {}, RoleType = string>。您最好不要设置为 any,而是希望使用特定应用程序中的类型。

AuthChecker 接收的第一个参数是基于ContextType 泛型的ResolverData object。如果我们基于像{ someKey: string } 这样的虚拟类型创建AuthChecker,那么context 对象将是{ someKey: string }

const myAuthChecker: AuthChecker<{someKey: string}> = ({ context }) => {
  return !!context.someKey
}

它没有属性reqsession。同样,AuthChecker&lt;any, any&gt;context 值为 any,它也没有 req 属性。

如果您想访问该数据,您需要使用适当的ContextType 创建一个AuthChecker。可能在您的应用程序中的某个地方已经有一个ContextType 的定义。例如,我定义了一个 interface,它与您的函数预期的 ContextType 匹配,但所有属性都是可选的。

interface MyContext {
  req?: {
    session?: {
      uuid?: string;
    }
  }
}

现在您的AuthChecker 可以使用可选链接?. 访问这些属性,以防它们是undefined.

const myAuthChecker: AuthChecker<MyContext> = ({ context: {req} }) => {
  return !!req?.session?.uuid;
}

你可以像这样声明内联类型:

const schema = await buildSchema({
  resolvers: [SomeResolvers],
  authChecker: ({ context }: { context: MyContext }) => {
    return !!context.req?.session?.uuid;
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 2019-12-13
    • 2021-05-15
    • 2020-06-19
    • 2023-01-28
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多