
Oben stehen die Argumente, denen aussagekräftige Bezeichnungen zugewiesen wurden. Unten sind Argumente mit nutzlosen Namen.
Warum habe ich darauf gewartet? Ich werde dies am Beispiel der Entwicklung einer Funktion erklären.
Verallgemeinerte Schnittstelle, die die flexible Behandlung von Argumenten unterstützt
Hier ist ein vereinfachtes Beispiel. Es basiert auf der Verwendung der Schnittstelle
IQuery. Die Schnittstelle soll die Eigenschaften von Funktionen beschreiben, die Anforderungen zum Abrufen von etwas ausführen. Es gibt immer ein Versprechen zurück und akzeptiert ein Generikum , das beschreibt, was das Versprechen ( TReturn) zurückgibt . Diese Schnittstelle ist sehr flexibel. Sie können sie verwenden, wenn Sie Funktionen erstellen, die keine Argumente oder eine unbekannte Anzahl von Argumenten annehmen ( UParams extends any[] = []).
interface IQuery<TReturn, UParams extends any[] = []> {
(...args: UParams): Promise<TReturn>
}
Zu testende Funktion: findSongAlbum ()
Über diese Oberfläche schreiben wir eine Funktion, die nach Musiktitel nach Songtitel (
title) und Künstler ( artist) sucht . Es gibt ein Versprechen zurück, das ein einzelnes Objekt vom Typ zurückgibt Album:
type Album = {
title: string
}
Ohne TypeScript würde der Code für eine solche Funktion folgendermaßen aussehen:
const findSongAlbum = (title, artist) => {
// ...
const albumName = '1989';
return Promise.resolve({
title: albumName
});
}
Wenn Sie eine solche Funktion in TypeScript schreiben und die Schnittstelle verwenden
IQuery, müssen Sie den Typ als ersten generischen Parameter übergeben Album. Dies stellt sicher, dass die Form des Versprechens immer dem Typ entspricht Album.
const findSongAlbum: IQuery<Album> = (title, artist) => {
// ...
const albumName = '1989';
return Promise.resolve({
title: albumName
});
}
Code, der vor TypeScript 4.0 geschrieben wurde
Bei der Entwicklung unserer Funktion müssen wir auch die Parameter deklarieren und angeben, welche Typen sie haben. In diesem Fall sind
titleund artistZeichenfolgen. Lassen Sie uns einen neuen Typ deklarieren Paramsund ihn als zweiten Typ für übergeben IQuery.
Ein Beispiel, das geschrieben wurde, ohne die neuen Funktionen von TypeScript 4.0 zu nutzen,
Paramswird durch eine Liste von Typen dargestellt. Jedes Element dieser Liste definiert den Typ des Arguments. Dies erfolgt in derselben Reihenfolge, in der die Argumente angezeigt werden, wenn die Funktion deklariert wird. Dies ist ein Beispiel für die Verwendung von Tupeln .
type Params: [string, string]
const findSongAlbum: IQuery<Album, Params> = (title, artist) => {
// ...
const albumName = '1989';
return Promise.resolve({
title: albumName
});
}
Wenn Sie den Typ analysieren
Params, können Sie feststellen, dass sein erstes Element stringden Typ dem stringersten Argument zuweist, dh - title. Das zweite Argument, das stringnatürlich auch der gleichen Argumentation folgt, weist dem stringzweiten Argument einen Typ zu - artist. Dadurch wird der Argumentlistentyp sicher.
Versuchen wir, mit dieser Funktion zu arbeiten.
Die Hinweise zu findSongAlbum () zeigen bedeutungslose Argumentbezeichnungen an
. Leider liefert dieser Ansatz zur Verwendung von Tupeln bei der Arbeit mit einer Funktion keine nützlichen und zuverlässigen Code-Argumentnamen (Bezeichnungen). Stattdessen wird uns gesagt, dass die Argumente für die Funktion sind
args_0: string, args_1: string... Aus diesem Beitrag kann ich zum Beispiel nur lernen, dass das erste Argument vom Typ sein muss string. Das Label arg_0sagt mir nicht, dass der erste Parameter der Funktion der Name ( title) der gesuchten Musikkomposition sein sollte.
Code, der TypeScript 4.0-Funktionen nutzt
Mit der Veröffentlichung des Release-Kandidaten TypeScript 4.0 haben wir nun Tupel zur Verfügung gestellt. Wir können sie verwenden, um nicht nur den Typ, sondern auch den semantischen Inhalt der Funktionsparameterlisten zu beschreiben.
Jetzt wird jedes Element des Typs
Paramsmit einer Beschriftung versehen, die bei Verwendung der Funktion in der IDE angezeigt wird findSongAlbum:
type Params: [title: string, artist: string]
const findSongAlbum: IQuery<Album, Params> = (title, artist) => {
// ...
const albumName = '1989';
return Promise.resolve({
title: albumName
});
}
Und so sieht es aus, wenn Sie mit dieser Funktion arbeiten.
Die Hinweise für findSongAlbum () zeigen Argumentbezeichnungen an, um die Bedeutung dieser Argumente zu verstehen. Dies ist sehr nützlich.
Wie Sie sehen, erhalten
arg_0: stringwir jetzt anstelle eines Ansichtshinweises einen Hinweis title: string. Dies bedeutet, dass wir jetzt nicht nur wissen, dass der Funktion eine Zeichenfolge übergeben werden muss, sondern auch, was genau diese Zeichenfolge enthalten sollte.
Was fehlt Ihnen in TypeScript besonders?
