Collections
Map: get の undefined だけでは未登録と undefined 値を区別できない
Map は undefined を値として保存できるため、キーの存在は has で確認します。
SourceundefinedMapValues.ts
Node.js 22
export function isConfigured(values: Map<string, string | undefined>, key: string): boolean {
return values.has(key);
}TestundefinedMapValues.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { isConfigured } from "../../src/map/undefinedMapValues.js";
test("getだけではundefined値のキーと未登録キーを区別できない", () => {
const values = new Map<string, string | undefined>([["configured", undefined]]);
assert.equal(values.get("configured"), undefined);
assert.equal(values.get("missing"), undefined);
assert.equal(isConfigured(values, "configured"), true);
assert.equal(isConfigured(values, "missing"), false);
});01Assertion
このテストで確認できること
- undefined 値のキーも未登録キーも get では undefined を返す
- has でキーの存在を区別できる
Map.get の戻り値を不在判定へ直接使うと、undefined を有効値にする設計と衝突します。
OBSERVED RESULT
expected: values.get("configured") → undefined
actual: undefined
expected: values.has("configured") → true