Typescript不使用某一类型的“证明”深一层

时间:2018-07-26 06:17:21

标签: typescript

在下面的所有示例中,假定strictNullChecks被启用。

假设我有

type Person = { name: string, nickname?: string }

我可以“向Typescript证明”,对于person: Person的某些实例,昵称已定义:

if (!!person.nickname) {
  // Happily use nickname here:
  const nickname: string = person.nickname
  console.log(nickname)
}

“证明”不适用于person本身:

if (!!person.nickname) {
  // !! ERROR !!
  const personWithNickname: { name: string, nickname: string } = person
  console.log(personWithNickname)
}

即使打字稿现在知道person确实有一个昵称。

愚蠢的事情是以下确实有效

if (!!person.nickname) {
  // All good again...
  const personWithNickname: { name: string, nickname: string } 
    = { ...person, nickname: person.nickname }
  console.log(personWithNickname)
}

但是我真的很想避免这种不必要的复制。

这是一个错误吗?有没有办法解决? (我需要将person传递给一个要求稍后nickname进行定义的函数。)

0 个答案:

没有答案