Читать книгу Angular - Ferdinand Malcher - Страница 66

Beliebige Werte mit any und unknown

Оглавление

In JavaScript kann grundsätzlich jede Variable jeden Wert annehmen. Da TypeScript abwärtskompatibel zu JavaScript ist, wird auch dieses Verhalten abgebildet: Eine mit any oder unknown typisierte Variable kann immer beliebige Werte mit beliebigen Typen annehmen.

let foo: any;

let bar: unknown;

foo = 5;

bar = 5;

foo = 'Hallo';

bar = 'Hallo';

Unsichere Typen mit any

Diese beiden Basistypen any und unknown haben jedoch einen wichtigen Unterschied: Der Wert einer mit any typisierten Variable kann zu jeder anderen Variable zugewiesen werden. any wird übrigens auch immer als Standardtyp verwendet, wenn wir eine Variable nicht explizit typisieren und der Typ von TypeScript nicht automatisch ermittelt werden kann.

const foo: any = 5;

const result: string = foo; // Zuweisung ohne Fehler!

let bar; // impliziter Typ "any"

Der Typ any bildet also eine unsichere oder unklare Typisierung ab. Dieses Verhalten birgt Gefahren, denn die Typprüfung wird überlistet. Achten wir hier nicht genau darauf, welche Werte tatsächlich in der Variable stecken, kann es zu ungewolltem Verhalten zur Laufzeit kommen.

Gewollt unbekannte Typen mit unknown

Der Typ unknown schafft Abhilfe. Eine solche Variable kann ebenfalls beliebige Werte mit jedem Typen annehmen. Allerdings kann der Wert einer unknown-Variable nur dann einer anderen Variable zugewiesen werden, wenn diese auch den Typ unknown oder any trägt. Eine Zuweisung, wie wir sie im Listing 4.3 gemacht haben, ist nicht möglich. Um den Wert einer mit unknown typisierten Variable dennoch zuweisen zu können, müssen wir mithilfe von typeof eine Typprüfung vornehmen, die den konkreten Wert in Betracht zieht.

const foo: unknown = 5;

const a1: string = foo;

// Type 'unknown' is not assignable to type 'string'.

const a2: number = foo;

// Type 'unknown' is not assignable to type 'number'.

const a3: unknown = foo; // Zuweisung funktioniert!

const a4: any = foo; // Zuweisung funktioniert!

// Typprüfung nach dem Wert

const a5: number = typeof foo === 'number' ? foo : 5;

// Zuweisung funktioniert!

Wenn ein Datentyp nicht genau bekannt ist, kann eine Variable also mithilfe von any oder unknown typisiert werden. Praktisch sollten Sie es aber vermeiden, any zu verwenden, denn dieser Typ ist fast immer ein Indiz dafür, dass Unklarheit über die Typisierung herrscht, die Sie beheben sollten. Wollen wir die konkrete Belegung einer Variable absichtlich im Unklaren lassen, ist unknown die bessere Wahl. Zum Beispiel sollten wir den Rückgabewert eines HTTP-Requests mit unknown typisieren, sodass wir im nachfolgenden Code weitere manuelle Typüberprüfungen vornehmen müssen, um die Werte zu verarbeiten.

Angular

Подняться наверх