打字稿返回空发现模式问题

时间:2021-03-20 16:33:44

标签: typescript design-patterns

如果我有一个像这样的用户界面:

export interface User {
  username: string;
  hash: string;
}

我有一个方法签名,看起来像这样,它通常从数据库返回一个 User

function getUser(username: string): Promise<User>

然后在调用程序中,我想做这样的事情:

  const user: User = await getUser(username);
  if (user && (await passMatch(password, user.hash))) {
    return genToken();
  }

未找到用户的返回类型和验证组合有哪些流行模式?

在 Java(对或错)中,我会返回 null 并进行空检查。

抛出 not found 错误并捕获它是一个好的模式吗?我无法调和没有找到一个不是错误。

1 个答案:

答案 0 :(得分:2)

如果没有找到用户不是错误,那么您应该像这样更改方法签名:

function getUser(username: string): Promise<User | null>

然后在调用方法中,如果它符合方法的规则,你应该抛出一个错误(你也不需要 : User,因为它是方法隐含的):

  const user = await getUser(username);
  if (!user) throw new Error...
  if ((await passMatch(password, user.hash))) {
    return genToken();
  }

或者,如果您实际上不需要抛出错误,只需在方法中保持您正在执行的操作即可。

此外,我可能会更改 await 中的 if

  const passwordCorrect = await passMatch(password, user.hash);
  if (!passwordCorrect) {
    throw...
  }
  return genToken();

附注:

如果你想使用好的模式并在你的项目中强制使用它们,我强烈建议你使用 lint。我推荐 airbnb typescript 配置:

https://www.npmjs.com/package/eslint-config-airbnb-typescript

相关问题