There is a constant evolution of items in your code, rendering the use of "?" as invalid
I expanded upon your illustration to display all possible variations Playground Link
const items: Artifact[] | undefined = [];
const undefinedItems: Artifact[] | undefined = undefined;
function getItems(): Artifact[] | undefined {
return [];
}
const c0 : Artifact = items[0];
const c1 : Artifact = items?.[0];
const c2 : Artifact = undefinedItems?.[0];
// ^ Type 'undefined' is not assignable to type 'Artifact'
const c3 : Artifact = getItems()[0];
// ^ Object is possibly 'undefined'.
const c4 : Artifact = getItems()?.[0];
// ^ Type 'Artifact | undefined' is not assignable to type 'Artifact'