如何避免Map出现“未定义”的严格null检查错误?

时间:2019-12-13 18:09:25

标签: typescript

我有以下代码将ES6 Map子类化,并且如果键丢失,我希望getItem函数返回null:

interface MapItem {
    id: string;
    sort: number;
    index: number;
}

class SortedMap  {
    private _list: Array<MapItem>;
    private _map: Map<string, MapItem>;

    constructor() {       
      this._list  = [];
      this._map = new Map();
    }

    add(item: MapItem) : void {
        this._list.push(item);
        this._map.set(item.id, item);
    }

    getItem(id: string) : MapItem | null {
        if (!this._map.has(id)) {
            return null;
        } else { 
            return this._map.get(id);   //compile error
        }
    };
}

问题是return this._map.get(id)未能编译为错误Type 'MapItem | undefined' is not assignable to type 'MapItem | null'. Type 'undefined' is not assignable to type 'MapItem | null',尽管在我看来似乎没有代码路径会产生此结果,因为我检查了.has(id ),然后尝试获取该项目。

为什么会这样,以及如何修复TypeScript方式?

0 个答案:

没有答案