首页 > 解决方案 > 空检查后对象可能是“未定义”

问题描述

我越来越

在分配之前使用变量“层”。

这里:if(layer == null || layer == undefined){

public static myFunc(type: number) {
    var layer: VectorLayer;
    if (type === 1) {
        layer = Map.getStaticVariableOne();
    } else if (type === 2) {
        layer = Map.getStaticVariableTwo();
    }
    if(layer == null || layer == undefined){
        return;
    }
    Utils.doThings(layer);
}

我在 Typescript 中做错了吗?

标签: typescript

解决方案


这是 TypeScript 的一个怪癖。

为了暂时解决这个问题,您可以执行“类型转换”来告诉编译器layer在您使用它时没有未定义。

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

主要区别在于您指定该层可以是undefined并且您将其显式设置为undefined. 然后,您只需在使用它之前检查以确保它不是未定义的。


推荐阅读