Tajpaj Ŝablonaj Ŝnuraj Tipoj

Kiel malvastigi kordajn specojn per la ŝablona korda mekanismo

Kio estas Ŝablonaj Laŭvortaj Tipoj

Ekde Tajpilo 4.1, vi povas signife plibonigi la tajpadon de viaj kordoj. Nur por rapide resumigi, en Tajpskribo vi povas difini tiel nomatajn "Laŭvortaj Tipoj". Anstataŭ nur difini variablon kiel ĉenon, vi povas malvastigi la tipon al specifa aro de ĉenoj permesitaj.

// 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";
}

Komencante kun Typescript 4.1, ĉi tiu koncepto plue disvolviĝis. Prenante "Ŝablonajn Laŭvortajn Ĉenojn" de Ĝavaskripto kiel inspiro, vi povas apliki la saman sintakson por viaj laŭvortaj tipoj en Tajpskribo. La ĉefa diferenco estas, ke kun "Ŝablonaj Laŭvortaj Tipoj", vi akiras multe pli da fleksebleco, ĉar la tipo mem povas preni parametrojn por ĉi tiu formo - la koncepto similas al generikoj, sed iomete malsama, ĉar ĝi postulas specifajn valorojn.

// 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'

Estas eĉ pli kun Tajpskribo 4.3

Dum mi skribas ĉi tion, la liberiga kandidato por Typescript 4.3 estis liberigita, kiu inkluzivas pliajn plibonigojn al Ŝablonaj Laŭvortaj Tipoj.

La tipa sistemo nun estas eĉ pli dinamika kaj povas pli bone konkludi la ĝustajn tipojn por vi. Ĉi tiuj lastaj ŝanĝoj plu maturigas Ŝablonan Ŝnurspecon.

// 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}`);

Konkludo

Kiel vi vidis, Typescript estas tiel potenca lingvo kiam temas pri difinado de dinamikaj tipoj. Ĉi tio precipe validas por ĉen-bazitaj tipoj. Kun la plej novaj ŝanĝoj en versio 4.3, la tipa sistemo povas pli bone konkludi la ĝustajn tipojn ol iam ajn, kio igas labori kun Typescript nur plaĉi.

Sugestoj

Rilataj

Aldono

Lingvoj