在下面的所有示例中,假定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
进行定义的函数。)