如何缩小字体范围

时间:2019-08-14 10:40:34

标签: typescript typescript-typings

我有UserModel:

id: number;
email: string;
avatar: string|object;

User.avatar作为字符串化的json存储在数据库中。然后,我有了下一个功能:

function (user: IUserModel) {

  if (typeof user.avatar === 'string') {
    user.avatar = JSON.parse(user.avatar);
  }
  // so, on this moment user.avatar always is object
  // do sth else with user... but these operations require user.avatar to be OBJECT
  // TypeScript doesn't allow to do these operations because in IUserModel avatar could be string|object
}

请告诉我TypeScript在if user.avatar之后始终是对象

2 个答案:

答案 0 :(得分:1)

看看类型保护器,它们会一次性检查类型并进行类型转换:https://basarat.gitbooks.io/typescript/docs/types/typeGuard.html

答案 1 :(得分:0)

在确定类型之后,可以使用断言强制类型。

  if (typeof user.avatar === 'string') {
    user.avatar = JSON.parse(user.avatar);
  }

  const avatar = JSON.parse(user.avatar) as object;

然后,您应该可以使用头像输入对象。

Type Assertion from the docs