事实:
我正在使用TS v.2.3.4。我已经创建了一个函数来检查定义了一个veriable的天气(它需要variable
作为参数并返回'undefined' !== typeof variable
)。和平的蛋糕。
export function IsDefined(variable: any): boolean {
return 'undefined' !== typeof variable;
}
问题:下面的代码会在2.行产生警告。 waring说对象可能未定义。
if (IsDefined(myVar)) {
myVar.mockProperty = "asdf"; //Object (myVar, obviously) is possibly undefined
}
问题:有没有办法告诉TS编译器IsDefined()
方法检查变量是否有未定义的值,所以它不会用假信息发出警告?还有其他方法可以解决这个问题吗?
我知道并且我不愿意使用的变通办法,因为它们会使代码变得不洁净:
(<myType>myVar).mockProperty = "asdf";
if ("undefined" !== typeof myVar) {
答案 0 :(得分:1)
你想在这里使用一个类型守卫。更改IsDefined
的定义:
export function IsDefined(variable: any): variable is {} {
return 'undefined' !== typeof variable;
}
现在编译器会知道从true
返回IsDefined
的任何内容都是对象,而不是undefined
。