另一个 TypeScript 菜鸟问题。
代码:
type Person2Name = {
name: string
}
type Person2Email = {
email: string | null | undefined
}
type Person2 =
& Person2Name
& Person2Email
function sendEmail2( email:Person2Email ){
console.log( 'Send e-mail to ' , email )
}
function contact1( person:Person2 ){
//enssureContactable( person );
sendEmail2( person.email ) // Argument of type 'string | null | undefined' is not assignable to parameter of type 'Person2Email'. Type 'undefined' is not assignable to type 'Person2Email'.ts(2345)
}
乍一看,这似乎与我之前的问题 (Type 'T | undefined' is not assignable to type 'T'. 'T' could be instantiated with an arbitrary type which could be unrelated to 'T | undefined') 相似,不同之处在于添加非空断言不会使错误消失。此外,我开始意识到非空断言很快就会变成一个糟糕的黑客。
(1) 我不明白为什么 TS 不明白“类型 'string | null | undefined' 的参数”与 Person2Email 相同?
(2) 上面的代码被缩短以删除一堆其他代码,包括创建'person'。是'person'没有正确初始化的问题吗? (如果是这样,那么这会引发更多问题,因为我可以获得 TS 喜欢的初始化代码。)