- 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
anyiləunknownarası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.
let city: string = 'Baku';
let temperature: number = 23.5;
let isSunny: boolean = true;
temperature = 25;
console.log(`${city}: ${temperature}°C, sunny: ${isSunny}`);Baku: 25°C, sunny: true
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.
let score = 10;
score = score + 5;
score = 'fifteen';score.ts:3:1 - error TS2322: Type 'string' is not assignable to type 'number'.
3 score = 'fifteen';
~~~~~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.
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}`);4 Murad Leyla is 17
name avtomatik string, age isə number olur.const scores: number[] = [90, 75, 88];
scores.push('ninety');
const point: [number, number] = [40.4, 49.9, 0];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];
~~~~~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.
let risky: any = 'hello';
let fromServer: unknown = 'hello';
risky.toFixed(2);
fromServer.toUpperCase();data.ts:5:1 - error TS18046: 'fromServer' is of type 'unknown'.
5 fromServer.toUpperCase();
~~~~~~~~~~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.
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));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ı.
let direction: 'left' | 'right' = 'left';
direction = 'right';
direction = 'up';direction.ts:3:1 - error TS2322: Type '"up"' is not assignable to type '"left" | "right"'.
3 direction = 'up';
~~~~~~~~~"up".Ə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.anyyoxlamanı söndürür;unknowntə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.
let count = 5; yazanda TypeScript count üçün hansı tipi çıxarır?