Gépirat sablon karakterlánc típusok

Hogyan szűkítsük a karakterlánc típusokat a sablon karakterlánc mechanizmusával

Mik azok a sablon irodalmi típusai

A Typescript 4.1 óta jelentősen javíthatja a húrok gépelését. A gyors összefoglalás érdekében a gépírásban definiálhatunk úgynevezett „irodalmi típusokat”. Ahelyett, hogy egy változót csak karakterláncként határozna meg, szűkítheti a típust egy adott megengedett karakterlánc-készletre.

// Define a mutable string as 'Literal Type'.
let key: "name" | "department" = "name";

// This works, as 'department' is part of the type.
key = "department";
// Won't work, as it's not define in the union type.
key = "company";

// Of course, the same applies for functions.
function getKey(): "name" | "department" {
  return Math.random() <= 0.5 ? "name" : "department";
}

A 4.1-es gépírással kezdve ezt a koncepciót tovább fejlesztették. Ha a Javascript „Template Literal Strings” -jét veszi inspirációnak, ugyanazt a szintaxist alkalmazhatja a szó szerinti típusaihoz a Typescript-ben. A fő különbség az, hogy a „Template Literal Types” használatával sokkal nagyobb rugalmasságot nyer, mivel a típus maga is paramétereket vehet fel ehhez az alakhoz - a koncepció hasonló a generikusokhoz, de kissé eltér attól, hogy konkrét értékeket igényel.

// Define a Literal Type
type State = "ready";

// Nice, isn't it? As in Javascript's 
// 'template literal strings', we can
// reuse the same syntax for TS.
//
// The create type here is now 'Key-ready'.
type Key = `key-${State}`;
// This of course works for union types as well.
// Let's take these non-descriptive types for a 
// quick demo:
type GraphState = "sleep" | "ready" | "error";
type MachineState = "booting" | "running";

// And here's the 'template literal type':
type EntityState = `ES-${GraphState | MachineState}`;

// The possible combinations therefore 
// work out like this:
//
// type EntityState = 'ES-sleep' 
//  | 'ES-ready'
//  | 'ES-error'
//  | 'ES-booting'
//  | 'ES-running'

Még több van a 4.3-as gépírással

Amint ezt írom, megjelent a Typescript 4.3 kiadási jelöltje, amely a Template Literal Types további fejlesztéseit tartalmazza.

A típusrendszer most még dinamikusabb, és jobban kikövetkeztetheti az Ön számára megfelelő típusokat. Ezek a legújabb változások tovább fejlesztik a sablon karakterlánc típusát.

// This example is taken 1:1 from 
// Typescript's 4.3 announcement.
// Please check out the link in the
// addendum to see all examples!

declare let s: string;
declare function f<T extends string>(x: T): T;

// Previously: string
// Now       : `hello-${string}`
let x2 = f(`hello ${s}`);

Következtetés

Mint látta, a gépírás olyan hatékony nyelv, amikor dinamikus típusokat kell meghatározni. Különösen igaz ez a string alapú típusokra. A 4.3-as verzió legújabb változásaival a típusrendszer minden eddiginél jobban kikövetkeztetheti a helyes típusokat, ami a Typescript-mel való munkát csak örömé teszi.

Javaslatok

Kapcsolódó

Kiegészítés

Nyelvek