Eesti

Avastage TypeScripti `const`-väidete võimekus muutumatute tüüpide tuletamiseks, parandades koodi turvalisust ja prognoositavust oma projektides. Õppige neid praktiliste näidete abil tõhusalt kasutama.

TypeScripti `const`-väited: muutumatu tüübituletus robustse koodi jaoks

TypeScript, JavaScripti superhulk, toob staatilise tüüpimise veebiarenduse dünaamilisse maailma. Üks selle võimsaid omadusi on tüübituletus, mille puhul kompilaator tuletab automaatselt muutuja tüübi. TypeScript 3.4-s tutvustatud `const`-väited viivad tüübituletuse sammu võrra edasi, võimaldades teil jõustada muutumatust ning luua robustsemat ja prognoositavamat koodi.

Mis on `const`-väited?

`const`-väited on viis TypeScripti kompilaatorile teada anda, et kavatsete väärtust hoida muutumatuna. Neid rakendatakse süntaksiga as const literaalse väärtuse või avaldise järel. See annab kompilaatorile juhise tuletada avaldise jaoks võimalikult kitsas (literaalne) tüüp ja märkida kõik omadused kui readonly.

Sisuliselt pakuvad `const`-väited tugevamat tüübiohutuse taset kui lihtsalt muutuja deklareerimine võtmesõnaga const. Kuigi const takistab muutuja enda uuesti määramist, ei takista see objekti või massiivi muutmist, millele muutuja viitab. `const`-väited takistavad ka objekti omaduste muutmist.

`const`-väidete kasutamise eelised

Praktilised näited

Näide 1: Põhikasutus literaaliga

Ilma `const`-väiteta tuletab TypeScript message'i tüübiks string:


const message = "Hello, World!"; // Tüüp: string

`const`-väitega tuletab TypeScript tüübiks literaalse stringi "Hello, World!":


const message = "Hello, World!" as const; // Tüüp: "Hello, World!"

See võimaldab teil kasutada literaalset stringitüüpi täpsemates tüübimääratlustes ja võrdlustes.

Näide 2: `const`-väidete kasutamine massiividega

Vaatleme värvide massiivi:


const colors = ["red", "green", "blue"]; // Tüüp: string[]

Kuigi massiiv on deklareeritud võtmesõnaga const, saate selle elemente siiski muuta:


colors[0] = "purple"; // Viga ei teki
console.log(colors); // Väljund: ["purple", "green", "blue"]

`const`-väite lisamisel tuletab TypeScript massiivi tüübiks kirjutuskaitstud stringide enniku (tuple):


const colors = ["red", "green", "blue"] as const; // Tüüp: readonly ["red", "green", "blue"]

Nüüd põhjustab katse massiivi muuta TypeScripti vea:


// colors[0] = "purple"; // Viga: Indeksi signatuur tüübis 'readonly ["red", "green", "blue"]' lubab ainult lugemist.

See tagab, et colors massiiv jääb muutumatuks.

Näide 3: `const`-väidete kasutamine objektidega

Sarnaselt massiividele saab ka objekte muuta `const`-väidete abil muutumatuks:


const person = {
  name: "Alice",
  age: 30,
}; // Tüüp: { name: string; age: number; }

Isegi võtmesõnaga const saate siiski muuta person objekti omadusi:


person.age = 31; // Viga ei teki
console.log(person); // Väljund: { name: "Alice", age: 31 }

`const`-väite lisamine muudab objekti omadused kirjutuskaitstuks (readonly):


const person = {
  name: "Alice",
  age: 30,
} as const; // Tüüp: { readonly name: "Alice"; readonly age: 30; }

Nüüd põhjustab katse objekti muuta TypeScripti vea:


// person.age = 31; // Viga: Ei saa määrata väärtust omadusele 'age', kuna see on kirjutuskaitstud omadus.

Näide 4: `const`-väidete kasutamine pesastatud objektide ja massiividega

`const`-väiteid saab rakendada pesastatud objektidele ja massiividele, et luua sügavalt muutumatuid andmestruktuure. Vaatleme järgmist näidet:


const config = {
  apiUrl: "https://api.example.com",
  endpoints: {
    users: "/users",
    products: "/products",
  },
  supportedLanguages: ["en", "fr", "de"],
} as const;

// Tüüp:
// {
//   readonly apiUrl: "https://api.example.com";
//   readonly endpoints: {
//     readonly users: "/users";
//     readonly products: "/products";
//   };
//   readonly supportedLanguages: readonly ["en", "fr", "de"];
// }

Selles näites on config objekt, selle pesastatud endpoints objekt ja supportedLanguages massiiv kõik märgitud kui readonly. See tagab, et ühtegi konfiguratsiooni osa ei saa käitusajal kogemata muuta.

Näide 5: `const`-väited funktsioonide tagastustüüpidega

Saate kasutada `const`-väiteid, et tagada funktsiooni tagastatav väärtus oleks muutumatu. See on eriti kasulik abifunktsioonide loomisel, mis ei tohiks oma sisendit muuta ega toota muutuvat väljundit.


function createImmutableArray(items: T[]): readonly T[] {
  return [...items] as const;
}

const numbers = [1, 2, 3];
const immutableNumbers = createImmutableArray(numbers);

// immutableNumbers'i tüüp: readonly [1, 2, 3]

// immutableNumbers[0] = 4; // Viga: Indeksi signatuur tüübis 'readonly [1, 2, 3]' lubab ainult lugemist.

Kasutusjuhud ja stsenaariumid

Konfiguratsiooni haldamine

`const`-väited on ideaalsed rakenduse konfiguratsiooni haldamiseks. Deklareerides oma konfiguratsiooniobjektid as const abil, saate tagada, et konfiguratsioon püsib kogu rakenduse elutsükli vältel muutumatuna. See hoiab ära juhuslikud muudatused, mis võivad põhjustada ootamatut käitumist.


const appConfig = {
  appName: "Minu Rakendus",
  version: "1.0.0",
  apiEndpoint: "https://api.example.com",
} as const;

Konstantide defineerimine

`const`-väited on kasulikud ka spetsiifiliste literaalsete tüüpidega konstantide defineerimisel. See võib parandada tüübiohutust ja koodi selgust.


const HTTP_STATUS_OK = 200 as const; // Tüüp: 200
const HTTP_STATUS_NOT_FOUND = 404 as const; // Tüüp: 404

Töötamine Reduxi või teiste olekuhaldus teekidega

Olekuhaldus teekides nagu Redux on muutumatus põhiprintsiip. `const`-väited aitavad jõustada muutumatust teie redutseerijates (reducers) ja tegevuste loojates (action creators), vältides juhuslikke oleku mutatsioone.


// Näide Reduxi redutseerijast

interface State {
  readonly count: number;
}

const initialState: State = { count: 0 } as const;

function reducer(state: State = initialState, action: { type: string }): State {
  switch (action.type) {
    default:
      return state;
  }
}

Rahvusvahelistamine (i18n)

Rahvusvahelistamisega töötades on teil sageli toetatud keelte ja nende vastavate lokaalkoodide komplekt. `const`-väited võivad tagada, et see komplekt jääb muutumatuks, vältides juhuslikke lisamisi või muudatusi, mis võiksid teie i18n-rakenduse katki teha. Näiteks kujutage ette, et toetate inglise (en), prantsuse (fr), saksa (de), hispaania (es) ja jaapani (ja) keelt:


const supportedLanguages = ["en", "fr", "de", "es", "ja"] as const;

type SupportedLanguage = typeof supportedLanguages[number]; // Tüüp: "en" | "fr" | "de" | "es" | "ja"

function greet(language: SupportedLanguage) {
  switch (language) {
    case "en":
      return "Hello!";
    case "fr":
      return "Bonjour!";
    case "de":
      return "Guten Tag!";
    case "es":
      return "¡Hola!";
    case "ja":
      return "こんにちは!";
    default:
      return "Selle keele jaoks tervitus pole saadaval.";
  }
}

Piirangud ja kaalutlused

Alternatiivid `const`-väidetele

Kuigi `const`-väited on võimas tööriist muutumatuse jõustamiseks, on ka teisi lähenemisviise, mida võite kaaluda:

Parimad tavad

Kokkuvõte

TypeScripti `const`-väited on väärtuslik tööriist muutumatuse jõustamiseks ja tüübiohutuse parandamiseks teie koodis. Kasutades as const, saate anda kompilaatorile juhise tuletada väärtuse jaoks võimalikult kitsas tüüp ja märkida kõik omadused kui readonly. See aitab vältida juhuslikke muudatusi, parandada koodi prognoositavust ja avada võimalused täpsemaks tüübikontrolliks. Kuigi `const`-väidetel on mõningaid piiranguid, on need võimas lisa TypeScripti keelele ja võivad oluliselt suurendada teie rakenduste robustsust.

Strateegiliselt `const`-väidete lisamisega oma TypeScripti projektidesse saate kirjutada usaldusväärsemat, hooldatavamat ja prognoositavamat koodi. Võtke omaks muutumatu tüübituletuse jõud ja tõstke oma tarkvaraarenduse praktikaid uuele tasemele.