Typescript 对象可能是';未定义';空检查后

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

我要走了

变量“layer”在赋值前使用

这里:
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);
}