你能看一下这段代码吗?为什么 Typescript 抱怨第一个“if”语句中的代码,而不抱怨第二个“if”语句中的代码?
export type IssueProps = {
type: 'job_warning' | 'job_error' | 'task_warning'
jobId?: string
}
export type JobIssueProps = IssueProps & {
type: 'job_warning' | 'job_error'
jobId: string
}
const sendDeadlineJobErrorAlert = (
deadlineIssue: JobIssueProps,
) => {
console.log(deadlineIssue)
}
const issue = {} as IssueProps
if (issue.type === 'job_error' && issue.jobId) {
// typescript reports an error
sendDeadlineJobErrorAlert(issue)
}
if (issue.type === 'job_error' && issue.jobId) {
// typescript doesn't report an error
sendDeadlineJobErrorAlert({...issue, type: issue.type, jobId: issue.jobId})
}
在第一个 if 中,您将 IssueProps 类型传递给需要 JobIssueProps 类型的函数,因此这不起作用。
在第二个中,您传递了 IssueProps + JobIssueProps 的其他必需参数,并且您已经检查了 type 和 jobId 不为空,因此没有错误。