Functional
optional property: 省略、undefined、null は別の状態になり得る
外部入力ではプロパティがない状態と undefined・null の値を区別する必要があります。
SourceabsentProperties.ts
Node.js 22
export function hasNickname(input: object): boolean {
return "nickname" in input;
}TestabsentProperties.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { hasNickname } from "../../src/nullable/absentProperties.js";
test("プロパティの不在とundefined値はin演算子で区別できる", () => {
assert.equal(hasNickname({}), false);
assert.equal(hasNickname({ nickname: undefined }), true);
});01Assertion
このテストで確認できること
- 空オブジェクトにはキーが存在しない
- undefined を持つオブジェクトにはキーが存在する
exactOptionalPropertyTypes を有効にすると、optional property へ undefined を明示代入しにくくなります。境界の状態数を減らすためです。
OBSERVED RESULT
expected: "nickname" in {} → false
actual: false
expected: "nickname" in {nickname: undefined} → true