当在构造函数中定义对象时,为什么打字稿会给出“对象可能未定义”?

问题描述 投票:0回答:1

标题说明了一切。我不明白 this.authService 在构造函数中的 this.authService = new AuthService() 之后如何可能未定义(或非常接近的东西)。基类使用 GenericApiService 的基类 - 为什么我必须在赋值之前使用 const 并传递给 super 。

export class AuthController extends CrudController<any> {
  authService: AuthService;

  constructor(app: Express) {
    const authService = new AuthService(database.db!);
    super('auth', app, authService);

    this.authService = authService;
  }

  registerUser(req: Request, res: Response, next: NextFunction) {
    // TS2532: Object is possibly undefined
    this.authService.createUser(orgId, req.body)
      .then((doc) => {
        return res.status(201).json(doc);
      })
  }
typescript undefined
1个回答
0
投票

将代码分解到最小量以重现问题后,我发现问题出在 authService 的“createUser”方法中,而不是我上面发布的控制器代码。我以为我在 createUser 中有一个工作函数,但我没有声明返回类型。它默认的返回类型为

Promise<never>

我不熟悉。声明返回类型后

Promise<User | void>

问题消失了。

如果将来有人被类似的事情难住了。拆掉您正在调用的函数并大幅简化它 - 也许您的返回类型不好。

© www.soinside.com 2019 - 2024. All rights reserved.