Lietuvių

Atskleiskite TypeScript „const“ tvirtinimų galią nekeičiamų tipų išvedimui, padidindami kodo saugumą ir nuspėjamumą savo projektuose. Sužinokite, kaip juos efektyviai naudoti su praktiniais pavyzdžiais.

TypeScript „const“ tvirtinimai: nekeičiamų tipų išvedimas patikimam kodui

TypeScript, JavaScript viršaibis, įneša statinį tipizavimą į dinamišką interneto programavimo pasaulį. Viena iš galingų jo savybių yra tipų išvedimas, kai kompiliatorius automatiškai nustato kintamojo tipą. „Const“ tvirtinimai, pristatyti TypeScript 3.4 versijoje, žengia tipų išvedimą dar vienu žingsniu toliau, leisdami užtikrinti nekintamumą ir kurti patikimesnį bei nuspėjamesnį kodą.

Kas yra „const“ tvirtinimai?

„Const“ tvirtinimai yra būdas nurodyti TypeScript kompiliatoriui, kad ketinate reikšmę laikyti nekintama. Jie taikomi naudojant as const sintaksę po literalios reikšmės ar išraiškos. Tai nurodo kompiliatoriui išvesti siauriausią įmanomą (literalinį) tipą išraiškai ir pažymėti visas savybes kaip readonly.

Iš esmės, „const“ tvirtinimai suteikia aukštesnį tipų saugumo lygį nei paprastas kintamojo deklaravimas su const. Nors const neleidžia iš naujo priskirti reikšmės pačiam kintamajam, tai neapsaugo nuo objekto ar masyvo, į kurį kintamasis nurodo, modifikavimo. „Const“ tvirtinimai taip pat neleidžia modifikuoti objekto savybių.

„Const“ tvirtinimų naudojimo privalumai

Praktiniai pavyzdžiai

1 pavyzdys: Paprastas naudojimas su literalu

Be „const“ tvirtinimo TypeScript išveda message tipą kaip string:


const message = "Hello, World!"; // Tipas: string

Su „const“ tvirtinimu TypeScript išveda tipą kaip literalią eilutę "Hello, World!":


const message = "Hello, World!" as const; // Tipas: "Hello, World!"

Tai leidžia naudoti literalius eilutės tipus tikslesniuose tipų apibrėžimuose ir palyginimuose.

2 pavyzdys: „Const“ tvirtinimų naudojimas su masyvais

Apsvarstykite spalvų masyvą:


const colors = ["red", "green", "blue"]; // Tipas: string[]

Nors masyvas deklaruotas su const, vis tiek galite keisti jo elementus:


colors[0] = "purple"; // Nėra klaidos
console.log(colors); // Išvestis: ["purple", "green", "blue"]

Pridėjus „const“ tvirtinimą, TypeScript išveda masyvą kaip „readonly“ eilučių kortežą:


const colors = ["red", "green", "blue"] as const; // Tipas: readonly ["red", "green", "blue"]

Dabar bandymas modifikuoti masyvą sukels TypeScript klaidą:


// colors[0] = "purple"; // Klaida: Indekso parašas 'readonly ["red", "green", "blue"]' tipe leidžia tik skaityti.

Tai užtikrina, kad colors masyvas išliks nekintamas.

3 pavyzdys: „Const“ tvirtinimų naudojimas su objektais

Panašiai kaip masyvai, objektai taip pat gali būti paversti nekintamais naudojant „const“ tvirtinimus:


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

Net ir su const, vis tiek galite keisti person objekto savybes:


person.age = 31; // Nėra klaidos
console.log(person); // Išvestis: { name: "Alice", age: 31 }

Pridėjus „const“ tvirtinimą, objekto savybės tampa readonly:


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

Dabar bandymas modifikuoti objektą sukels TypeScript klaidą:


// person.age = 31; // Klaida: Negalima priskirti 'age', nes tai yra tik skaitoma savybė.

4 pavyzdys: „Const“ tvirtinimų naudojimas su įdėtais objektais ir masyvais

„Const“ tvirtinimai gali būti taikomi įdėtiems objektams ir masyvams, norint sukurti giliai nekintamas duomenų struktūras. Apsvarstykite šį pavyzdį:


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

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

Šiame pavyzdyje config objektas, jo įdėtas endpoints objektas ir supportedLanguages masyvas yra pažymėti kaip readonly. Tai užtikrina, kad jokia konfigūracijos dalis negali būti atsitiktinai pakeista vykdymo metu.

5 pavyzdys: „Const“ tvirtinimai su funkcijų grąžinamais tipais

Galite naudoti „const“ tvirtinimus, kad užtikrintumėte, jog funkcija grąžina nekintamą reikšmę. Tai ypač naudinga kuriant pagalbines funkcijas, kurios neturėtų keisti savo įvesties duomenų ar generuoti kintamos išvesties.


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

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

// immutableNumbers tipas: readonly [1, 2, 3]

// immutableNumbers[0] = 4; // Klaida: Indekso parašas 'readonly [1, 2, 3]' tipe leidžia tik skaityti.

Naudojimo atvejai ir scenarijai

Konfigūracijos valdymas

„Const“ tvirtinimai idealiai tinka programos konfigūracijai valdyti. Deklaruodami savo konfigūracijos objektus su as const, galite užtikrinti, kad konfigūracija išliks nuosekli per visą programos gyvavimo ciklą. Tai apsaugo nuo atsitiktinių pakeitimų, kurie galėtų sukelti netikėtą elgseną.


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

Konstantų apibrėžimas

„Const“ tvirtinimai taip pat naudingi apibrėžiant konstantas su konkrečiais literalais tipais. Tai gali pagerinti tipų saugumą ir kodo aiškumą.


const HTTP_STATUS_OK = 200 as const; // Tipas: 200
const HTTP_STATUS_NOT_FOUND = 404 as const; // Tipas: 404

Darbas su Redux ar kitomis būsenos valdymo bibliotekomis

Būsenos valdymo bibliotekose, tokiose kaip Redux, nekintamumas yra pagrindinis principas. „Const“ tvirtinimai gali padėti užtikrinti nekintamumą jūsų reduktoriuose (reducers) ir veiksmų kūrėjuose (action creators), užkertant kelią atsitiktinėms būsenos mutacijoms.


// Pavyzdinis Redux reduktorius

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

Internalizacija (i18n)

Dirbant su internalizacija, dažnai turite palaikomų kalbų rinkinį ir atitinkamus lokalės kodus. „Const“ tvirtinimai gali užtikrinti, kad šis rinkinys išliks nekintamas, užkertant kelią atsitiktiniams papildymams ar pakeitimams, kurie galėtų sugadinti jūsų i18n įgyvendinimą. Pavyzdžiui, įsivaizduokite, kad palaikote anglų (en), prancūzų (fr), vokiečių (de), ispanų (es) ir japonų (ja) kalbas:


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

type SupportedLanguage = typeof supportedLanguages[number]; // Tipas: "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 "Greeting not available for this language.";
  }
}

Apribojimai ir svarstymai

Alternatyvos „const“ tvirtinimams

Nors „const“ tvirtinimai yra galingas įrankis nekintamumui užtikrinti, yra ir kitų metodų, kuriuos galite apsvarstyti:

Geroji praktika

Išvada

TypeScript „const“ tvirtinimai yra vertingas įrankis, padedantis užtikrinti nekintamumą ir pagerinti tipų saugumą jūsų kode. Naudodami as const, galite nurodyti kompiliatoriui išvesti siauriausią įmanomą reikšmės tipą ir pažymėti visas savybes kaip readonly. Tai gali padėti išvengti atsitiktinių pakeitimų, pagerinti kodo nuspėjamumą ir atverti galimybes tikslesniam tipų tikrinimui. Nors „const“ tvirtinimai turi tam tikrų apribojimų, jie yra galingas TypeScript kalbos papildymas ir gali ženkliai pagerinti jūsų programų patikimumą.

Strategiškai įtraukdami „const“ tvirtinimus į savo TypeScript projektus, galite rašyti patikimesnį, lengviau prižiūrimą ir nuspėjamesnį kodą. Pasinaudokite nekeičiamų tipų išvedimo galia ir pakelkite savo programinės įrangos kūrimo praktiką į aukštesnį lygį.