为什么保护可空类型在这种情况下不起作用?
interface Person { name?: string }
let alex = {} as Person
function welcome(person: { name: string }) {}
if (alex.name != null) {
s = alex.name // Works nicely, no error here,
// it knows that alex.name isn't null
welcome(alex) // Wrongly complains here
// that `alex.name` could be null
}
您需要启用strictNullCheck
编译器选项。
答案 0 :(得分:3)
无论Helper
是否为空,alex.name
和{ name?: string }
类型都不兼容。
你可以这样做:
{ name: string }
这可能是一种矫枉过正,但那是type guards的工作原理 你当然可以输入断言:
function hasName(person: Person): person is { name: string } {
return person.name != null;
}
if (hasName(alex)) {
welcome(alex);
}