Typescript 对象可能是';未定义';空检查后
我要走了 变量“layer”在赋值前使用 这里:Typescript 对象可能是';未定义';空检查后,typescript,Typescript,我要走了 变量“layer”在赋值前使用 这里:if(layer==null | | layer==undefined){ 我在Typescript中做错了什么吗?只需检查层是否存在: if (!layer) { return; } Utils.doThings(layer); 要检查更详细一点,而不仅仅是针对真实值: if (layer === undefined || layer === null) { // Or just layer == null return; } Util
if(layer==null | | layer==undefined){
我在Typescript中做错了什么吗?只需检查
层是否存在:
if (!layer) {
return;
}
Utils.doThings(layer);
要检查更详细一点,而不仅仅是针对真实值:
if (layer === undefined || layer === null) { // Or just layer == null
return;
}
Utils.doThings(layer);
这是打字稿的一个怪癖
为了暂时解决这个问题,您可以执行一个“类型转换”,告诉编译器当您使用它时,层
不是未定义的
Utils.doThings(<VectorLayer> layer);
// alternatively
// Utils.doThings(layer as VectorLayer);
主要区别在于,您指定图层可以是未定义的
,并将其显式设置为未定义的
。然后您只需在使用它之前检查它是否未定义。顺便说一句,图层==null
覆盖图层==未定义的
您能解释一下您的错误吗?我无法复制CATE表示代码出现了精确的错误,但是下面的解决方法应该是有用的。您使用的是什么版本的编译器?请考虑编辑您的问题中的代码以构成指南中所描述的代码。代码应该是任何人都可以进入IDE的,唯一的问题应该是您所面临的问题。uck!@jcalz对不起,我也是typescript和stackoverflow的初学者!下次我会改进测试代码。如果layer
是空字符串,或者数字0
,或者其他错误(但已定义),该怎么办值?@spender好吧,你是对的-我还在学习TS:)我想,因为var层:向量层;
检查!层就足够了。啊。我的错。我没有看到它被定义为对象类型…可能(虽然学究式地说,你可以类型向量层=数字;常量x:VectorLayer=0;
)我无法检查“layer”是否未定义或为null,因为类型为VectorLayer,if\else if不能保证已分配该变量。错误是变量“layer”在分配之前已使用。
添加“|未定义”解决了问题。谢谢c1moore,很抱歉,我是typescript的初学者。救了我的命。第二个建议解决了我在null/未定义检查中获取“对象可能未定义”时遇到的问题。将未定义的并集分配给它修复了该问题,以便它正确识别null检查中的引用
Utils.doThings(<VectorLayer> layer);
// alternatively
// Utils.doThings(layer as VectorLayer);
public static myFunc(type: number) {
var layer: VectorLayer | undefined = undefined;
if (type === 1) {
layer = TestMap.getStaticVariableOne();
} else if (type === 2) {
layer = TestMap.getStaticVariableTwo();
}
if (layer === null || layer === undefined){
return;
}
Utils.doThings(layer);
}