TypeScript 映射:类型 'number | undefined' 不可分配给类型 'number'

TypeScript Map: Type 'number | undefined' is not assignable to type 'number'

我在 VS Code 中有下面的打字稿代码,

const hash: Map<string, number> = new Map<string, number>([
    ['Small', 1],
    ['Medium', 2],
    ['Large', 3],
]);
const sz = 'Small';
const num: number = hash.has(sz) ? hash.get(sz) : 0;

一直抱怨:

类型 'number | undefined' 不能分配给类型 'number'。类型 'undefined' 不能分配给类型 'number'.

不确定我在这里做错了什么。 hash.has(sz) 是否已经确保 hash.get(sz) 不会未定义?

我目前的做法是使用 const num: number = hash.has(sz) ? hash.get(sz)! : 0; 但对我来说似乎并不优雅

解决此类问题的正确方法是什么?

尝试从数组的第 3 个元素中删除逗号:['Large', 3]

const hash: Map<string, number> = new Map<string, number>([
    ['Small', 1],
    ['Medium', 2],
    ['Large', 3],
]);
const sz = 'Small';
const num: number = hash.get(sz) ?? 0;

这应该可以做到。 Map.prototype.get returns undefined 如果找不到键,我们可以将其空合并为0.