'string | 类型的参数空| undefined' 不能分配给类型为 'Person2Email' 的参数。类型“未定义”不可分配

时间:2021-07-20 14:27:01

标签: typescript

另一个 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 喜欢的初始化代码。)

0 个答案:

没有答案