为什么在TypeScript中使用部分映射类型时类型保护的行为会有所不同

时间:2018-11-08 18:25:17

标签: typescript

使用tsc --strictNullChecks编译以下代码失败,并显示error TS2339: Property 'name' does not exist on type '{}'

type Obj = {} | undefined;

type User = {
  email: string;
  password: string;
  name: string;
};

type PartialUser = Partial<User>;

function isUser(obj: Obj): obj is PartialUser {
  return true;
}

function getUserName(obj: Obj) {
  if (isUser(obj)) {
    return obj.name;
  }

  return '';
}

但是,如果我将type PartialUser = Partial<User>;替换为

type PartialUser = {
  email?: string;
  password?: string;
  name?: string;
};

一切都是笨拙的。

有一些解决方法,但是我很好奇为什么会这样。 PartialUser的这两个定义在功能上是否应该等效?我使用的是版本3.1.3

1 个答案:

答案 0 :(得分:1)