Typoskriptcode, der die Möglichkeit nicht berücksichtigt, dass ein Array-Element möglicherweise undefiniert zurückgibt
<p>Der folgende Code besteht den Typescript-Typprüfer (v2.9.1), löst jedoch zur Laufzeit einen <code>TypeError</code> aus. </p>
<pre class="brush:php;toolbar:false;">interface Item { id: string }
const list: Item[] = [{ id: 'a' }, { id: 'b' }];
const item = list[3]; // Typ: Item
const itemId = item.id; // Typ: string</pre>
<p>Da der Zugriff auf ein Element in einem typisierten Array immer <code>undefiniert</code> zurückgeben kann, sollte <code>item</code> <code>item: Item | sein. , was Sie dazu zwingen würde, eine Nullprüfung durchzuführen, nicht wahr? </p>
<p>Was mich noch mehr überrascht hat, ist, dass der folgende Code auch die Typprüfung bestanden hat: </p>
<pre class="brush:php;toolbar:false;">const item2: Item |.
const item2Id = item2.id;</pre>
<p>Obwohl die Umwandlung des Rückgabewerts dazu führt, dass die Typprüfung fehlschlägt: </p>
<pre class="brush:php;toolbar:false;">const item3 = list[3] as Item undefiniert;
const item3Id = item3.id; // [ts] Objekt ist möglicherweise „undefiniert“.</pre>
<p>Das Erstellen einer explizit typisierten Accessor-Funktion kann auch die <code>undefinierte</code>-Situation erfassen, führt jedoch zu unnötigem Overhead: </p>
<pre class="brush:php;toolbar:false;">const getItem1 = (index: number, items: Item[]): Item |.
const item3 = getItem1(3, list);
const item3Id = item3 && item3.id;</pre>
<p>Ist dies eine bekannte Einschränkung von Typescript? Gibt es ein empfohlenes Muster oder eine empfohlene Bibliothek, um mit dieser Situation umzugehen? </p>