我有以下代码将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方式?