Məzmuna keç
Educora
Başlanğıc15 dəq2 / 8

Əsas tiplər və tip çıxarışı

`string`, `number`, `boolean`, massivlər və kortejlərlə tanış ol, TypeScript-in tipləri özünün necə müəyyən etdiyini gör, `any` ilə `unknown` arasındakı fərqi və literal tipləri öyrən.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Dəyişənlərə əsas tipləri yazmaq və tip çıxarışına nə vaxt etibar etmək olduğunu bilmək
  • Massiv və kortej tiplərini təsvir etmək
  • any ilə unknown arasındakı fərqi izah etmək
  • Qiymətləri literal tiplərlə məhdudlaşdırmaq

JavaScript-də dəyişən bu gün ədəd, sabah sətir, birisi gün isə obyekt saxlaya bilər — heç kim etiraz etməz. Kiçik skriptdə bu rahatdır, böyük proqramda isə qarışıqlıq yaradır: score dəyişəninin içində nə olduğunu bilmək üçün bütün kodu izləmək lazım gəlir. TypeScript-də hər dəyişənin tipi var və o, dəyişənin bütün ömrü boyu eyni qalır. Ən xoşu isə budur: tipləri çox vaxt özün yazmalı olmursan.

Primitiv tiplər

JavaScript kursundan tanıdığın primitiv qiymətlərin hər birinin TypeScript-də öz tipi var. Ən çox istifadə olunanlar üç tipdir: mətn üçün string, istənilən ədəd üçün — tam və ya kəsr — number, true/false üçün boolean. Tip adları kiçik hərflə yazılır.

TypeScript
let city: string = 'Baku';
let temperature: number = 23.5;
let isSunny: boolean = true;

temperature = 25;
console.log(`${city}: ${temperature}°C, sunny: ${isSunny}`);
Gözlənilən nəticə
Baku: 25°C, sunny: true

Tip çıxarışı

Tərif
Tip çıxarışı

TypeScript-in dəyişənin tipini ona verilən ilk qiymətə baxaraq özünün müəyyən etməsi. let score = 10 yazanda annotasiya yoxdur, amma score artıq number tiplidir.

TypeScript
let score = 10;
score = score + 5;
score = 'fifteen';
Text
score.ts:3:1 - error TS2322: Type 'string' is not assignable to type 'number'.

3 score = 'fifteen';
  ~~~~~
Tip yazmamışıq, amma TypeScript score-un ədəd olduğunu yadda saxlayıb.

Redaktorda kursoru dəyişənin üzərində saxlasan, TypeScript-in çıxardığı tipi görəcəksən: let score: number. Qayda sadədir: dəyişənə dərhal qiymət verirsənsə, tipi yazma — çıxarış kifayətdir. Tipi qiymətsiz elan edilən dəyişənlərə və funksiyaların parametrlərinə yaz; parametrləri növbəti dərsdə öyrənəcəyik.

Massivlər və kortejlər

Massivin tipi elementlərin tipi və kvadrat mötərizə ilə yazılır: number[] — ədədlər massivi. Eyni şeyi Array<number> kimi də yazmaq olar. Kortej (tuple) isə uzunluğu və hər mövqenin tipi əvvəlcədən məlum olan massivdir: [string, number] — əvvəl sətir, sonra ədəd, cəmi iki element.

TypeScript
const scores: number[] = [90, 75, 88];
const names: Array<string> = ['Aysel', 'Murad'];
scores.push(100);

const entry: [string, number] = ['Leyla', 17];
const [name, age] = entry;

console.log(scores.length, names[1]);
console.log(`${name} is ${age}`);
Gözlənilən nəticə
4 Murad
Leyla is 17
Kortejin destrukturizasiyası: name avtomatik string, age isə number olur.
TypeScript
const scores: number[] = [90, 75, 88];
scores.push('ninety');

const point: [number, number] = [40.4, 49.9, 0];
Text
lists.ts:2:13 - error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

2 scores.push('ninety');
              ~~~~~~~~

lists.ts:4:7 - error TS2322: Type '[number, number, number]' is not assignable to type '[number, number]'.
  Source has 3 element(s) but target allows only 2.

4 const point: [number, number] = [40.4, 49.9, 0];
        ~~~~~
Ədədlər massivinə sətir əlavə etmək olmaz, iki elementli kortejə isə üç element yazmaq olmaz.

any və unknown

Bəzən qiymətin tipi əvvəlcədən bilinmir — məsələn, o, serverdən və ya JSON.parse-dan gəlir. Bunun üçün iki xüsusi tip var. any yoxlamanı tamamilə söndürür: belə qiymətlə istənilən əməliyyatı yazmaq olar, səhvlər isə yenə icra zamanı üzə çıxır. unknown isə «hələ bilmirəm» deməkdir: ona istənilən qiyməti vermək olar, amma istifadə etməzdən əvvəl tipini yoxlamaq məcburidir.

TypeScript
let risky: any = 'hello';
let fromServer: unknown = 'hello';

risky.toFixed(2);
fromServer.toUpperCase();
Text
data.ts:5:1 - error TS18046: 'fromServer' is of type 'unknown'.

5 fromServer.toUpperCase();
  ~~~~~~~~~~
4-cü sətir səhvsiz kompilyasiya olunur, amma işə düşəndə çökəcək — sətrin toFixed metodu yoxdur. unknown isə səhvi dərhal göstərir.

unknown ilə düzgün iş belə görünür: əvvəlcə typeof ilə yoxlayırsan, if blokunun içində isə TypeScript artıq qiymətin tipini dəqiq bilir.

TypeScript
function describe(value: unknown): string {
  if (typeof value === 'string') {
    return `a string of length ${value.length}`;
  }
  if (typeof value === 'number') {
    return `the number ${value.toFixed(1)}`;
  }
  return 'something else';
}

console.log(describe('Baku'));
console.log(describe(3.14159));
console.log(describe(true));
Gözlənilən nəticə
a string of length 4
the number 3.1
something else

Literal tiplər

Tip konkret bir qiymət də ola bilər. 'left' | 'right' tipi yalnız bu iki sətirdən birini qəbul edir; | işarəsi «və ya» deməkdir. Belə literal tiplər hərf səhvlərindən qoruyur və redaktor mümkün qiymətləri özü təklif edir. Maraqlıdır ki, const planet = 'Earth' yazanda planet-in tipi string yox, məhz 'Earth' olur — axı sabit heç vaxt dəyişməyəcək. let ilə isə tip string olardı.

TypeScript
let direction: 'left' | 'right' = 'left';
direction = 'right';
direction = 'up';
Text
direction.ts:3:1 - error TS2322: Type '"up"' is not assignable to type '"left" | "right"'.

3 direction = 'up';
  ~~~~~~~~~
Səhv mesajında literal tiplər qoşa dırnaqla göstərilir: "up".
1 / 6

Əsas fikirlər

  • Əsas primitiv tiplər: string, number, boolean — həmişə kiçik hərflə.
  • Dəyişənə dərhal qiymət verilirsə, TypeScript tipi özü çıxarır; tipi sonradan dəyişmək olmaz.
  • number[] massivdir, [string, number] isə uzunluğu və mövqelərinin tipi sabit olan kortejdir.
  • any yoxlamanı söndürür; unknown təhlükəsizdir, çünki istifadədən əvvəl yoxlama tələb edir.
  • Literal tiplər ('left' | 'right') qiyməti bir neçə dəqiq variantla məhdudlaşdırır.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
let count = 5; yazanda TypeScript count üçün hansı tipi çıxarır?