用于可空类型的TypeScript guard不起作用

时间:2016-12-29 09:56:09

标签: typescript

为什么保护可空类型在这种情况下不起作用?

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编译器选项。

1 个答案:

答案 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);
}