TypeScript Samouczek: Co to jest, interfejs, wyliczenie, tablica
โก Inteligentne podsumowanie
TypeScript jest silnie typizowanym nadzbiorem JavaSkrypt, ktรณry kompiluje siฤ do zwykลego kodu JavaSkrypt dodaje klasy, interfejsy, typy wyliczeniowe, moduลy i przestrzenie nazw. Ten artykuล obejmuje instalacjฤ, zmienne, typy, tablice, klasy, modyfikatory dostฤpu, interfejsy, funkcje, typy wyliczeniowe, moduลy i deklaracje otoczenia.

Czym jest TypeScript?
TypeScript jest nadzbiorem JavaScenariusz. TypeScript to obiektowy jฤzyk programowania, ktรณry obsลuguje klasy, interfejsy i wiele wiฤcej. Jest to jฤzyk open-source opracowany przez Microsoft ktรณry statycznie kompiluje kod do JavaSkrypt. Moลผna go ลatwo uruchomiฤ w przeglฤ darce lub w Nodejs.
Wszystkie najnowsze funkcje wydane dla ECMAScript sฤ obsลugiwane w TypeScripti dodatkowo TypeScript ma wลasne funkcje obiektowe, takie jak interfejsy, deklaracje otoczenia i dziedziczenie klas, ktรณre pomagajฤ w rozwojuping duลผa aplikacja, ktรณrej zbudowanie w inny sposรณb byลoby trudne JAVASCRIPT.
Zwiฤ zek jest jednokierunkowy. Kaลผdy waลผny JavaPlik skryptu jest juลผ prawidลowy TypeScript, ale odwrotna sytuacja nie jest prawdziwa, poniewaลผ adnotacje typu istniejฤ tylko w TypeScript i sฤ usuwane podczas kompilacji.
Dlaczego warto korzystaฤ TypeScript?
Oto najwaลผniejsze korzyลci pลynฤ ce z korzystania z TypeScript:
- Duลผe i zลoลผone projekty w JavaSkrypty sฤ trudne do kodowania i utrzymania.
- TypeScript pomaga w duลผej mierze w organizacji kodu i usuwa wiฤkszoลฤ bลฤdรณw podczas kompilacji, a nie w czasie wykonywania.
- TypeScript obsลuguje biblioteki JS i dokumentacjฤ API.
- Jest to jฤzyk skryptowy z opcjonalnym typowaniem, co oznacza, ลผe โโtypy moลผna przyjmowaฤ stopniowo.
- TypeScript kod moลผna przekonwertowaฤ na zwykลy JavaKod skryptu dla dowolnej przeglฤ darki docelowej.
- Zapewnia lepszฤ strukturalizacjฤ kodu i techniki programowania obiektowego.
- Umoลผliwia lepsze wsparcie narzฤdzi czasu tworzenia, w tym automatyczne uzupeลnianie i bezpieczne refaktoryzowanie.
- Moลผe rozszerzyฤ moลผliwoลci jฤzyka poza standard, dodajฤ c takie funkcje jak dekoratory.
Najwiฤkszฤ praktycznฤ korzyลciฤ jest wsparcie edytora. Poniewaลผ kompilator zna ksztaลt kaลผdej wartoลci, edytor moลผe zmieniฤ nazwฤ wลaลciwoลci w caลym projekcie i zgลosiฤ kaลผde miejsce, ktรณre juลผ nie pasuje.
TypeScript History
Przyjrzyjmy siฤ waลผnym punktom orientacyjnym z historii TypeScript:
- Po dwรณch latach wewnฤtrznego rozwoju w Microsoft, TypeScript Wersja 0.9 zostaลa wydana w 2013 roku.
- TypeScript Wersja 1.0 z dodatkowฤ obsลugฤ typรณw generycznych zostaลa wydana na konferencji Build 2014.
- W lipcu 2014 nowy TypeScript pojawiล siฤ kompilator, ktรณry byล piฤฤ razy szybszy od poprzedniej wersji.
- W lipcu 2015 r. dodano obsลugฤ moduลรณw ES6, sลowa kluczowego przestrzeni nazw, forโฆof i dekoratorรณw.
- W listopadzie 2016 r. dodano typy mapowane, typy kluczy i wyszukiwania oraz obiekty rest i spread.
- 27 marca 2018 r. dodano typy warunkowe i ulepszono instrukcjฤ keyof z typami przeciฤcia.
- TypeScript Wersja 5.0, wydana w marcu 2023 r., unowoczeลniลa dekoratory i zmniejszyลa rozmiar pakietu.
- TypeScript Wersja 6.0 ukazaลa siฤ w marcu 2026 r. jako ostateczna wersja oparta na JavaBaza kodu skryptu.
- TypeScript Wersja 7.0 przenosi kompilator do natywnej implementacji jฤzyka Go, ktรณra Microsoft raportuje, ลผe jest okoลo dziesiฤฤ razy szybszy niลผ wersja 6.0.
Kto uลผywa TypeScript?
TypeScript Nie jest juลผ wyborem niszowym. Stanowi podstawฤ kilku najpopularniejszych narzฤdzi front-end i back-end, a poniลผsza lista pokazuje, gdzie poczฤ tkujฤ cy najprawdopodobniej siฤ z nim zetknฤ .
- Kฤ towy: Framework Angular jest napisany w TypeScripti oczekuje siฤ, ลผe bฤdzie w nim rรณwnieลผ pisany kod aplikacji.
- Projekty React i Vue: Oba ekosystemy sฤ oficjalnie przewoลผone TypeScript szablony, a wiฤkszoลฤ nowoczesnych programรณw startowych domyลlnie je wลฤ cza.
- Tylne zakoลczenia Node.js: Frameworki serwerowe, takie jak NestJS, sฤ zbudowane wokรณล TypeScript klasy i dekoratory.
- Narzฤdzia edytora: Visual Studio Code jest samo w sobie duลผe TypeScript baza kodu, dlatego obsลuga tego jฤzyka jest tak kompletna.
- Duลผe interfejsy korporacyjne: Zespoลy pracujฤ ce z wieloma wspรณลpracownikami stosujฤ tฤ metodฤ w celu wychwytywania bลฤdรณw integracji przed wdroลผeniem.
Jak pobraฤ i zainstalowaฤ TypeScript
Oto krok po kroku proces pobierania i instalacji TypeScript:
Krok 1) Pobierz i zainstaluj Nodejs
Przejdลบ do oficjalnej strony Nodejs, https://nodejs.org/en/download/, a nastฤpnie pobierz i zainstaluj Nodejs dla swojego systemu operacyjnego. Szczegรณลowe instrukcje znajdziesz w przewodniku na stronie jak pobraฤ i zainstalowaฤ Node.js.
Krok 2) Sprawdลบ wersjฤ Nodejs i npm
Aby sprawdziฤ, czy Nodejs i npm sฤ zainstalowane, sprawdลบ wersjฤ w wierszu poleceล.
D:\typeproject>node --version v22.14.0 D:\typeproject>npm --version 10.9.2
Dziaลa kaลผda aktualna wersja Node LTS. TypeScript Do uruchomienia kompilatora wymagana jest jedynie obsลugiwana wersja Node.
Krok 3) TypeScript instalacja sprzฤtu
Utwรณrz katalog projektu typeproject\ i uruchom polecenie npm init, jak pokazano w poniลผszym poleceniu:
npm init
Krok 4) Rozpocznij instalacjฤ
Tworzy to plik package.json, w ktรณrym bฤdฤ przechowywane zaleลผnoลci naszego projektu.
Po zakoลczeniu zainstaluj TypeScript w sposรณb nastฤpujฤ cy:
npm -g install typescript
Powyลผsze polecenie zajmie siฤ instalacjฤ TypeScriptDodanie โ-gโ do npm install spowoduje instalacjฤ TypeScript globalnie. Zaletฤ uลผywania -g jest to, ลผe bฤdziesz mรณgล uลผywaฤ TypeScript tsc polecenie z dowolnego katalogu, poniewaลผ jest ono instalowane globalnie. Jeลli nie chcesz instalowaฤ TypeScript globalnie uลผyj poniลผszego polecenia:
npm install --save-dev typescript
Utwรณrz folder src\ w katalogu swojego projektu i w nim utwรณrz TypeScript plik test.ts i napisz swรณj kod.
Przykลad: test.ts
function add(x:number, y:number) { return x+y; } let sum = add(5,10); console.log(sum);
skompilowaฤ TypeScript kod do Javascript
Aby skompilowaฤ powyลผszy kod uลผyj nastฤpujฤ cego polecenia.
If TypeScript jest zainstalowany globalnie, uลผyj poniลผszego polecenia:
tsc test.ts
If TypeScript jest zainstalowany lokalnie w Twoim projekcie, musisz uลผyฤ ลcieลผki TypeScript z node_modules, jak pokazano, lub uruchom go przez npx:
node_modules\typescript\bin\tsc test.ts OR npx tsc test.ts
Powyลผsze polecenie utworzy plik test.js, w ktรณrym zostanie skompilowany kod JavaScenariusz.
Przykลad: test.js
function add(x, y) { return x + y; } var sum = add(5, 10); console.log(sum);
Wykonaฤ Javascript za pomocฤ Nodejsa
Teraz wykonamy test.js w Nodejs w nastฤpujฤ cy sposรณb:
D:\typeproject\src>node test.js 15
Wartoลฤ przekazana do console.log jest wyลwietlana po uruchomieniu test.js.
Wykonaฤ JavaSkrypt w przeglฤ darce
Przykลad:
<html> <head></head> <body> <script type="text/javascript" src="test.js"></script> </body> </html>
skompilowaฤ TypeScript kod do Javascript przy uลผyciu wersji EcmaScript
TypeScript Obsลuguje wszystkie wydane funkcje ECMAScript, z ktรณrych programiลci mogฤ korzystaฤ podczas kodowania. Jednak nie wszystkie nowe funkcje sฤ obsลugiwane w starszych przeglฤ darkach, dlatego moลผe byฤ konieczna kompilacja do starszej wersji ECMAScript. TypeScript udostฤpnia opcje kompilatora, ktรณre robiฤ dokลadnie to.
Przykลad: test.ts
var addnumbers = (a, b) => {
return a+b;
}
addnumbers(10, 20);
Aby skompilowaฤ do wybranej wersji ES, moลผesz uลผyฤ opcji target lub t w swoim poleceniu w nastฤpujฤ cy sposรณb:
tsc --target ES6 test.ts OR tsc -t ES6 test.ts
Domyลlnie, celem dla klasycznego kompilatora jest ES3. Jeลli chcesz to zmieniฤ, moลผesz uลผyฤ powyลผszego polecenia.
Obecnie bฤdziemy uลผywaฤ ES6 jako celu:
tsc --target ES6 test.ts
test.ts do test.js
var addnumbers = (a, b) => {
return a+b;
}
addnumbers(10, 20);
Kod pozostaje taki sam, poniewaลผ uลผyta funkcja strzaลkowa jest funkcjฤ ES6 i nie ulega zmianie po kompilacji do ES6.
Domyลlnie celem jest ES3, wiฤc bez celu plik test.js bฤdzie wyglฤ daล nastฤpujฤ co:
var addnumbers = function (a, b) {
return a + b;
};
addnumbers(10, 20);
Tutaj gruba strzaลka zostaลa zamieniona na zwykลฤ anonimowฤ funkcjฤ.
๐ก Wskazรณwka: Zamiast za kaลผdym razem przekazywaฤ opcje w wierszu poleceล, uruchom tsc --init aby wygenerowaฤ plik tsconfig.json. Kompilator odczytuje nastฤpnie ustawienia target, outDir i strict z tego pliku dla caลego projektu.
Zmienne w TypeScript
Zmienne sลuลผฤ do przechowywania wartoลci, a wartoลฤ moลผe byฤ ciฤ giem znakรณw, liczbฤ , wartoลciฤ logicznฤ lub wyraลผeniem. Jeลli chodzi o zmienne w TypeScript, sฤ podobne do JAVASCRIPT. Nauczmy siฤ wiฤc deklarowaฤ i przypisywaฤ wartoลฤ zmiennym w TypeScript.
Zmiennych nie moลผna uลผywaฤ w kodzie bez ich zdefiniowania. Aby zadeklarowaฤ zmiennฤ , moลผna uลผyฤ
byลo sลowo kluczowe,
niech keyword
const keyword
Praca ze zmiennymi w TypeScript jest podobne do JavaSkrypt i uลผytkownicy zaznajomieni z JavaSkrypt z ลatwoลciฤ sobie z tym poradzi. W nowoczesnym kodzie, niech oraz const sฤ preferowane w stosunku do byลo, poniewaลผ ich zakres bloku zapobiega caลej klasie bลฤdรณw.
Deklarowanie zmiennych za pomocฤ var
Skลadnia:
var firstname = "Roy";
Przyjrzyjmy siฤ kilku TypeScript przykลady pozwalajฤ ce zrozumieฤ dziaลanie sลowa kluczowego var, a takลผe zakres zmiennych zadeklarowanych za pomocฤ byลo sลowo kluczowe.
1 przykลad:
var k = 1; // variable k will have a global scope function test() { var c = 1; // variable c is local and accessible only inside function test return k++; } test(); // output as 1 test(); // output as 2 alert(c); // will throw error, Uncaught ReferenceError: c is not defined
2 przykลad:
var t = 0; // variable t is declared in global scope function test() { var t = 10; // t is redeclared inside the function, so changes stay local return t; } test(); // will return 10 console.log(t); // will console 0
3 przykลad:
var i = 0; function test() { if (i > 0) { var t = 1; } return t; } test(); // returns undefined. The if block did not run, yet t is still declared // because var declarations are hoisted to the whole function. i++; // value of i is incremented test(); // since i > 0 the if block runs and the value returned is 1
Deklarowanie zmiennych za pomocฤ let
TypeScript skลadnia let jest podana poniลผej:
Skลadnia:
let name = "Roy";
Dziaลanie niech zmienna jest prawie taka sama jak byลo, ale z jednฤ waลผnฤ rรณลผnicฤ , ktรณrฤ pokazuje poniลผszy przykลad.
Przykลad:
let i = 1; function test() { if (i > 0) { let t = 1; } return t; } test(); // throws an error: Cannot find name 't'
Powyลผej TypeScript przykลad wyrzuca bลฤ d, ale ten sam kod zadziaลaลby w przypadku byลo sลowo kluczowe. Zmienne zadeklarowane za pomocฤ niech sฤ dostฤpne tylko w bloku, w ktรณrym zostaลy zadeklarowane. W tym przykลadzie t istnieje tylko w bloku if, a nie w caลej funkcji.
To samo dotyczy dowolnej funkcji, pฤtli for, pฤtli while czy bloku switch. Zmienna let jest dostฤpna tylko wewnฤ trz tego bloku, a odwoลanie siฤ do niej poza nim powoduje bลฤ d. To jest gลรณwna rรณลผnica miฤdzy var a let.
Deklarowanie zmiennych za pomocฤ const
Const oznacza zmienne staลe. Sฤ one podobne do zmiennych let, z tฤ rรณลผnicฤ , ลผe raz przypisanej wartoลci nie moลผna zmieniฤ. Deklaracja const musi zatem zostaฤ zainicjowana w tym samym wierszu.
Skลadnia:
const name = "Roy";
Przykลad:
const age = "25"; age = "30"; // error: Cannot assign to 'age' because it is a constant const total; // error: 'const' declarations must be initialized
Uลผywaj const zawsze, gdy wiesz, ลผe przypisana wartoลฤ nie zostanie ponownie przypisana. Pamiฤtaj, ลผe const zapobiega ponownemu przypisaniu powiฤ zania, a nie modyfikacji obiektu, na ktรณry ono wskazuje.
Wpisuje TypeScript
TypeScript jest jฤzykiem silnie typowanym, podczas gdy JavaSkrypt nie jest. Zmiennฤ , ktรณrej wartoลฤ jest zdefiniowana jako ciฤ g znakรณw, moลผna bez problemu zmieniฤ na liczbฤ. JavaScenariusz. Tego samego nie toleruje siฤ w TypeScript, w TypeScriptTyp zmiennej jest definiowany na poczฤ tku i musi byฤ zachowany przez caลy czas wykonywania. Kaลผda zmiana prowadzi do bลฤdu kompilacji. JavaScenariusz.
Oto podstawowe typy:
| Typ | Akceptuje | Przykลadowa deklaracja |
|---|---|---|
| numer | Liczby caลkowite, zmiennoprzecinkowe i uลamki | niech a: liczba = 10; |
| ciฤ g | Tylko wartoลci tekstowe | niech s: string = โczeลฤโ; |
| boolean | tylko prawda lub faลsz | niech b: wartoลฤ logiczna = prawda; |
| kaลผdy | Dowolna wartoลฤ, bez sprawdzania | niech x: dowolny = 123; |
| uniewaลผniฤ | Brak wartoลci zwracanej | funkcja f(): void {} |
Numer
Przyjmuje tylko liczby caลkowite, zmiennoprzecinkowe, uลamki i podobne wartoลci liczbowe.
Skลadnia:
let a :number = 10; let marks :number = 150; let price :number = 10.2;
Oto kilka waลผnych metod, ktรณre moลผna stosowaฤ w przypadku typรณw liczbowych:
do naprawionego() โ zamieni liczbฤ na ciฤ g znakรณw, zachowujฤ c podane w metodzie miejsca dziesiฤtne.
toString () โ ta metoda zamieni liczbฤ na ciฤ g znakรณw.
wartoลฤ() โ ta metoda zwrรณci pierwotnฤ wartoลฤ liczby.
doPrecyzji() โ ta metoda sformatuje liczbฤ do okreลlonej dลugoลci.
Przykลad: ze wszystkimi metodami liczbowymi
let _num :number = 10.345; _num.toFixed(2); // "10.35" _num.valueOf(); // 10.345 _num.toString(); // "10.345" _num.toPrecision(2); // "10"
sznur
String: tylko wartoลci typu string.
Skลadnia:
let str :string = "hello world";
Oto kilka waลผnych metod, ktรณre moลผna stosowaฤ w przypadku typรณw ciฤ gรณw:
- dzieliฤ() โ ta metoda podzieli ciฤ g na tablicฤ.
- charAt() โ ta metoda zwrรณci znak o podanym indeksie.
- indeks() โ metoda ta zwraca pozycjฤ pierwszego wystฤ pienia podanej wartoลci.
- obsลugi produkcji rolnej, ktรณra zastฤ piลa() โ ta metoda przyjmuje 2 ciฤ gi znakรณw. Szuka pierwszej wartoลci w ciฤ gu i, jeลli jest obecna, zastฤpuje jฤ drugฤ , zwracajฤ c nowy ciฤ g znakรณw.
- trym() โ ta metoda usunie spacje po obu stronach ciฤ gu znakรณw.
- podstr() โ ta metoda zwrรณci czฤลฤ ciฤ gu znakรณw, w zaleลผnoลci od podanej pozycji poczฤ tkowej i dลugoลci.
- podciฤ g() โ ta metoda zwraca czฤลฤ ciฤ gu znakรณw, w zaleลผnoลci od pozycji poczฤ tkowej i koลcowej. Znak na pozycji koลcowej jest pomijany.
- do wielkich liter() โ zamienia ciฤ g na wielkie litery.
- do maลych liter() โ konwertuje ciฤ g znakรณw na maลe litery.
Przykลad:
let _str:string = "Typescript"; _str.charAt(1); // y _str.split(""); // ["T","y","p","e","s","c","r","i","p","t"] _str.indexOf("s"); // 4, gives -1 if the value does not exist _str.replace("Type", "Coffee"); // "Coffeescript" _str.trim(); // "Typescript" _str.substr(4, _str.length); // "script" _str.substring(4, 10); // "script" _str.toUpperCase(); // "TYPESCRIPT" _str.toLowerCase(); // "typescript"
Boolean
Wartoลฤ logiczna akceptuje tylko wartoลci logiczne prawda i faลsz. W przeciwieลstwie do zwykลych JavaSkrypt, liczby 0 i 1 nie sฤ akceptowane, poniewaลผ sฤ typu liczbowego.
Skลadnia:
let status :boolean = true; let isDone :boolean = false; let bflag :boolean = 1; // error: Type 'number' is not assignable to type 'boolean'
Kaลผdy
Skลadnia:
let a :any = 123 a = "hello world"; // changing type will not give any error.
Zmienne zadeklarowane za pomocฤ kaลผdy type moลผe zawieraฤ ciฤ g znakรณw, liczbฤ, tablicฤ, wartoลฤ logicznฤ lub pustkฤ. TypeScript nie spowoduje ลผadnego bลฤdu kompilacji, co jest podobne do bลฤdรณw zmiennych w JavaSkrypt. Uลผywaj typu โanyโ tylko wtedy, gdy nie masz pewnoลci co do typu wartoลci, ktรณra bฤdzie powiฤ zana z danฤ zmiennฤ , poniewaลผ wyลฤ cza on wszelkie sprawdzanie tej wartoลci.
Uniewaลผniฤ
Typ void jest najczฤลciej uลผywany jako typ zwracany przez funkcjฤ, ktรณra niczego nie zwraca.
Skลadnia:
function testfunc():void{
//code here
}
TypeScript Szyk
An Szyk in TypeScript to typ danych, w ktรณrym moลผna przechowywaฤ wiele wartoลci. Nauczmy siฤ, jak deklarowaฤ i przypisywaฤ wartoลci do operacji tablicowych wโฆ TypeScript.
Poniewaลผ TypeScript To jฤzyk silnie typizowany, dlatego naleลผy okreลliฤ typ danych wartoลci w tablicy. W przeciwnym razie zostanie ona potraktowana jako typ dowolny.
Zadeklaruj i zainicjuj tablicฤ
Skลadnia:
let nameofthearray : Array<typehere>
Przykลad
let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; // array with all string values let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; // array with all numbers let month_year: Array<string | number> = ["Jan", 2015, "Feb", 2016]; // mixed let alltypes: Array<any> = [true, false, "Harry", 2000, { "a": "50", "b": "20" }]; // any type
Rรณลผne sposoby uzyskiwania dostฤpu do elementรณw z tablicy
Aby pobraฤ elementy z tablicy, wartoลci zaczynajฤ siฤ od indeksu 0 i koลczฤ na dลugoลci tablicy pomniejszonej o jeden.
let years: Array<number> = [2016, 2017, 2018, 2019]; years[0]; // output will be 2016 years[1]; // output will be 2017 years[2]; // output will be 2018 years[3]; // output will be 2019
Elementy tablicy moลผna rรณwnieลผ pobraฤ za pomocฤ TypeScript dla pฤtla, jak pokazano niลผej.
Korzystanie z TypeScript dla pฤtli
let years: Array<number> = [2016, 2017, 2018, 2019]; for (let i = 0; i < years.length; i++) { console.log(years[i]); }
Wyjลcie:
2016 2017 2018 2019
โ ๏ธ Ostrzeลผenie: Warunek pฤtli musi byฤ i < years.length. Pismo i <= years.length uruchamia jednฤ
dodatkowฤ
iteracjฤ i drukuje undefined, poniewaลผ ostatni prawidลowy indeks to zawsze dลugoลฤ pomniejszona o jeden.
Korzystanie z pฤtli for-in
let years: Array<number> = [2016, 2017, 2018, 2019]; for (let i in years) { console.log(years[i]); }
Wyjลcie:
2016 2017 2018 2019
Korzystanie z pฤtli for-of
let years: Array<number> = [2016, 2017, 2018, 2019]; for (let i of years) { console.log(i); }
Wyjลcie:
2016 2017 2018 2019
Korzystanie z pฤtli forEach
let years: Array<number> = [2016, 2017, 2018, 2019]; years.forEach(function(yrs, i) { console.log(yrs); });
Wyjลcie:
2016 2017 2018 2019
TypeScript Metody tablicowe
TypeScript Obiekt Array ma wiele wลaลciwoลci i metod, ktรณre uลatwiajฤ programistom ลatwฤ i efektywnฤ obsลugฤ tablic. Wartoลฤ wลaลciwoลci moลผna uzyskaฤ, okreลlajฤ c arrayname.property, a wynik metody, okreลlajฤ c arrayname.method().
| Czลonek | Cel | Zwroty |
|---|---|---|
| dลugoลฤ | Liczba elementรณw w tablicy | numer |
| odwrรณciฤ() | Reversekolejnoลฤ elementรณw na miejscu | Ta sama tablica |
| sortowaฤ() | Sortuje elementy na swoim miejscu | Ta sama tablica |
| Muzyka pop() | Usuwa ostatni element | Usuniฤty element |
| Zmiana() | Usuwa pierwszy element | Usuniฤty element |
| Pchaฤ() | Dodaje wartoลฤ jako ostatni element | Nowa dลugoลฤ |
| konkat() | ลฤ czy dwie tablice w jednฤ | Nowa tablica |
Przykลad wลaลciwoลci dลugoลci
let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; console.log(months.length); // 12
Przykลad metody odwrotnej
console.log(months.reverse()); // ["Dec","Nov","Oct","Sept","Aug","July","June","May","April","March","Feb","Jan"]
Przykลad metody sortowania
console.log(months.sort()); // ["April","Aug","Dec","Feb","Jan","July","June","March","May","Nov","Oct","Sept"]
Przykลad metody pop
console.log(months.pop()); // Dec
Przykลad metody przesuniฤcia
console.log(months.shift()); // Jan
Przykลad metody push
let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; console.log(years.push(2020)); // 6, the new length years.forEach(function(yrs, i) { console.log(yrs); // 2015, 2016, 2017, 2018, 2019, 2020 });
Przykลad metody concat
let array1: Array<number> = [10, 20, 30]; let array2: Array<number> = [100, 200, 300]; console.log(array1.concat(array2)); // [10, 20, 30, 100, 200, 300]
Klasa w TypeScript
TypeScript jest nadzbiorem JavaSkrypt, wiฤc wszystko co moลผliwe JavaSkrypt jest rรณwnieลผ moลผliwy w TypeScript. Klasa to funkcja dodana od wersji ES6. Wczeลniej w JavaFunkcjonalnoลฤ skryptu, przypominajฤ ca klasฤ, zostaลa osiฤ gniฤta dziฤki funkcji z metodami prototypowymi, umoลผliwiajฤ cymi ponowne wykorzystanie kodu. Uลผywajฤ c klasy, kod moลผe zbliลผyฤ siฤ do jฤzykรณw takich jak Java, C# i Python, gdzie kod moลผna ลatwo ponownie wykorzystaฤ.
Definiowanie klasy w TypeScript
Oto podstawowa skลadnia klasy w TypeScript:
class nameofclass {
//define your properties here
constructor() {
// initialize your properties here
}
//define methods for class
}
Przykลad: dziaลajฤ cy przykลad w klasie
class Students { age : number; name : string; roll_no : number; constructor(age: number, name:string, roll_no: number) { this.age = age; this.name = name; this.roll_no = roll_no; } getRollNo(): number { return this.roll_no; } getName() : string { return this.name; } getAge() : number { return this.age; } }
W powyลผszym przykลadzie mamy klasฤ o nazwie โStudenciโ. Ma ona wลaลciwoลci โwiekโ, โimiฤโ i โnr rolkiโ.
Konstruktor w A TypeScript Klasa
Klasa Students zdefiniowana powyลผej ma konstruktor pokazany poniลผej:
constructor(age: number, name:string, roll_no: number) {
this.age = age;
this.name = name;
this.roll_no = roll_no;
}
Metoda konstruktora ma parametry: wiek, nazwa i numer rolki. Konstruktor inicjalizuje wลaลciwoลci podczas tworzenia instancji klasy. Dostฤp do wลaลciwoลci uzyskuje siฤ za pomocฤ to Sลowo kluczowe, na przykลad this.age, aby uzyskaฤ dostฤp do age i this.roll_no, aby uzyskaฤ dostฤp do roll_no. Moลผesz rรณwnieลผ uลผyฤ konstruktora domyลlnego, jak pokazano poniลผej:
constructor () {}
Metody wewnฤ trz a TypeScript Klasa
W klasie Students zdefiniowane sฤ metody, na przykลad getRollNo(), getName() i getAge(), ktรณre zwracajฤ wartoลci wลaลciwoลci roll_no, name i age.
getRollNo(): number {
return this.roll_no;
}
getName() : string {
return this.name;
}
getAge() : number {
return this.age;
}
Tworzenie instancji klasy w TypeScript
In TypeScriptAby utworzyฤ instancjฤ klasy, naleลผy uลผyฤ operatora new. Tworzฤ c instancjฤ za pomocฤ operatora new, otrzymujemy obiekt, ktรณry moลผe uzyskaฤ dostฤp do wลaลciwoลci i metod klasy, jak pokazano poniลผej:
let student_details = new Students(15, "Harry John", 33); student_details.getAge(); // 15 student_details.getName(); // Harry John
Kompilacja TypeScript Klasa do JavaScenariusz
Do kompilacji moลผesz uลผyฤ polecenia tsc, jak pokazano poniลผej JavaScenariusz.
Command: tsc Students.ts
Dane wyjลciowe JavaKod skryptu podczas kompilacji wyglฤ da nastฤpujฤ co:
var Students = /** @class */ (function () {
function Students(age, name, roll_no) {
this.age = age;
this.name = name;
this.roll_no = roll_no;
}
Students.prototype.getRollNo = function () {
return this.roll_no;
};
Students.prototype.getName = function () {
return this.name;
};
Students.prototype.getAge = function () {
return this.age;
};
return Students;
}());
In JavaSkrypt, klasa jest konwertowana na funkcjฤ wywoลujฤ cฤ siฤ sama.
Dziedziczenie klas
Klasy mogฤ byฤ dziedziczone przy uลผyciu metody rozciฤ ga siฤ sลowo kluczowe w TypeScript.
Skลadnia dziedziczenia klas:
class A {
//define your properties here
constructor() {
// initialize your properties here
}
//define methods for class
}
class B extends A {
//define your properties here
constructor() {
// initialize your properties here
}
//define methods for class
}
klasa B. bฤdzie mรณgล siฤ podzieliฤ klasa A metody i wลaลciwoลci.
Oto dziaลajฤ cy przykลad klasy wykorzystujฤ cej dziedziczenie:
class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } getName(): string { return this.name; } getAge(): number { return this.age; } } class Student extends Person { tmarks: number; getMarks(): number { return this.tmarks; } setMarks(tmarks) { this.tmarks = tmarks; } } let _std1 = new Student('Sheena', 24); _std1.getAge(); // output is 24 _std1.setMarks(500); _std1.getMarks(); // output is 500
Masz dwie klasy: Person i Student. Klasa Student rozszerza klasฤ Person, a obiekt utworzony na podstawie klasy Student moลผe uzyskiwaฤ dostฤp do wลasnych metod i wลaลciwoลci, a takลผe do metod i wลaลciwoลci klasy, ktรณrฤ rozszerza.
Teraz dodajmy kilka zmian do klasy powyลผej.
Przykลad:
class Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } getName(): string { return this.name; } getAge(): number { return this.age; } } class Student extends Person { tmarks: number; constructor(name: string, age: number, tmarks: number) { super(name, age); this.tmarks = tmarks; // the derived property must be assigned too } getMarks(): number { return this.tmarks; } setMarks(tmarks) { this.tmarks = tmarks; } } let _std1 = new Student('Sheena', 24, 500); _std1.getAge(); // output is 24 _std1.getMarks(); // output is 500
Zmiana w porรณwnaniu z poprzednim przykลadem polega na zdefiniowaniu konstruktora w klasie Student. Konstruktor przyjmuje te same parametry co klasa bazowa, a takลผe wszelkie wลasne parametry dodatkowe.
In TypeScript Musisz wywoลaฤ super ze wszystkimi parametrami klasy bazowej. Musi to byฤ pierwsze polecenie w konstruktorze, poniewaลผ super uruchamia konstruktor klasy rozszerzonej. Kaลผda wลaลciwoลฤ zadeklarowana przez klasฤ pochodnฤ , โโtaka jak tmarks, musi zostaฤ nastฤpnie jawnie przypisana, w przeciwnym razie getMarks zwrรณci wartoลฤ undefined.
Modyfikatory dostฤpu w TypeScript
TypeScript Obsลuguje modyfikatory dostฤpu: publiczny, prywatny i chroniony (protected) do metod i wลaลciwoลci. Domyลlnie, jeลli nie podano modyfikatora dostฤpu, metoda lub wลaลciwoลฤ jest uznawana za publicznฤ i jest ลatwo dostฤpna z obiektu klasy.
W przypadku modyfikatorรณw dostฤpu prywatnego, elementy nie sฤ dostฤpne z poziomu obiektu klasy i sฤ przeznaczone wyลฤ cznie do uลผytku wewnฤ trz klasy. Nie sฤ dostฤpne dla klasy odziedziczonej.
W przypadku modyfikatorรณw dostฤpu chronionego elementy sฤ przeznaczone do uลผytku wewnฤ trz klasy i klasy dziedziczonej i nie sฤ dostฤpne z poziomu obiektu klasy.
Przykลad:
class Person { protected name: string; protected age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } private getName(): string { return this.name; } getDetails(): string { return "Name is " + this.getName(); } } class Student extends Person { tmarks: number; constructor(name: string, age: number, tmarks: number) { super(name, age); this.tmarks = tmarks; } getMarks(): number { return this.tmarks; } getFullName(): string { return this.name; } setMarks(tmarks) { this.tmarks = tmarks; } } let _std1 = new Student('Sheena', 24, 500); _std1.getMarks(); // output is 500 _std1.getFullName(); // output is Sheena _std1.getDetails(); // output is Name is Sheena
| zmiana | Sama klasa | Klasa pochodna | Obiekt klasy |
|---|---|---|---|
| publiczny | Tak | Tak | Tak |
| chroniony | Tak | Tak | Nie |
| prywatny | Tak | Nie | Nie |
Interfejs w TypeScript
Jedna z podstawowych cech TypeScript Interfejsy to zbiรณr reguล, ktรณre muszฤ zostaฤ zaimplementowane przez jednostkฤ, ktรณra go uลผywa. Jednostkฤ moลผe byฤ klasa, funkcja lub zmienna. Interfejs moลผe skลadaฤ siฤ z wลaลciwoลci i metod. Wลaลciwoลฤ lub metodฤ moลผna oznaczyฤ jako opcjonalnฤ , uลผywajฤ c skลadni โ?โ. Interfejs dodaje silne sprawdzenie typu dla kaลผdej funkcji, zmiennej lub klasy, ktรณra go implementuje.
Skลadnia interfejsu w TypeScript
interface Dimension {
width: string;
height: string;
}
Zdefiniowaลeล interfejs o nazwie Dimension, ktรณry ma wลaลciwoลci width i height, obie typu string.
Ten interfejs moลผna zaimplementowaฤ za pomocฤ zmiennej, funkcji lub klasy. Oto przykลad zmiennej implementujฤ cej interfejs Dimension.
Przykลad:
interface Dimension { width: string; height: string; } let _imagedim: Dimension = { width: "100px", height: "200px" };
Sygnatura interfejsu Dimension ma szerokoลฤ i wysokoลฤ, a oba sฤ obowiฤ zkowe. Pominiฤcie jakiejkolwiek wลaลciwoลci lub zmiana typu spowoduje bลฤ d kompilacji podczas kompilacji kodu. JavaScenariusz.
Powyลผszy kod po skompilowaniu JavaSkrypt wyglฤ da nastฤpujฤ co:
var _imagedim = {
width: "100px",
height: "200px"
};
Zobaczmy teraz, jak uลผywaฤ interfejsu z funkcjฤ .
Uลผywanie interfejsu w funkcji jako typu zwracanego
interface Dimension { width: string; height: string; } function getDimension() : Dimension { let width = "300px"; let height = "250px"; return { width: width, height: height } }
W powyลผszym przykลadzie interfejs Dimension jest uลผywany jako typ zwracany przez funkcjฤ getDimension(). Wartoลฤ zwracana musi byฤ zgodna z wลaลciwoลciami i typami zadeklarowanymi w interfejsie.
Skompilowany JavaKod skryptu bฤdzie wyglฤ daล nastฤpujฤ co:
function getDimension() {
var width = "300px";
var height = "250px";
return {
width: width,
height: height
};
}
Jeลli podczas kompilacji typ zwracany nie bฤdzie odpowiadaล interfejsowi, zostanie zgลoszony bลฤ d.
Interfejs jako parametr funkcji
interface Dimension { width: string; height: string; } function getDimension(dim: Dimension) : string { let finaldim = dim.width + "-" + dim.height; return finaldim; } getDimension({width:"300px", height:"250px"}); // "300px-250px"
W powyลผszym przykลadzie uลผyto interfejsu Dimension jako parametru funkcji getDimension(). Po wywoลaniu funkcji przekazywany do niej parametr musi byฤ zgodny z reguลami zdefiniowanymi przez interfejs.
Skompilowany JavaKod skryptu bฤdzie wyglฤ daล nastฤpujฤ co:
function getDimension(dim) {
var finaldim = dim.width + "-" + dim.height;
return finaldim;
}
getDimension({ width: "300px", height: "250px" });
Klasa implementujฤ ca interfejs
Aby skorzystaฤ z interfejsu z klasฤ , naleลผy uลผyฤ sลowa kluczowego narzฤdzia.
Skลadnia klasy implementujฤ cej interfejs:
class NameofClass implements InterfaceName {
}
Poniลผszy przykลad pokazuje interfejs dziaลajฤ cy z klasฤ .
interface Dimension { width : string, height: string, getWidth(): string; } class Shapes implements Dimension { width: string; height: string; constructor (width:string, height:string) { this.width = width; this.height = height; } getWidth() { return this.width; } }
W powyลผszym przykลadzie zdefiniowano interfejs Dimension z wลaลciwoลciami width i height, obie typu string, oraz metodฤ o nazwie getWidth(), ktรณra zwraca string.
Skompilowany JavaKod skryptu bฤdzie wyglฤ daล nastฤpujฤ co:
var Shapes = /** @class */ (function () {
function Shapes(width, height) {
this.width = width;
this.height = height;
}
Shapes.prototype.getWidth = function () {
return this.width;
};
return Shapes;
}());
Funkcje w TypeScript
Funkcje to zestawy instrukcji wykonywanych w celu wykonania zadania. W JavaW skrypcie wiฤkszoลฤ kodu jest napisana w formie funkcji i odgrywajฤ one waลผnฤ rolฤ. TypeScript Masz dostฤpne klasy, interfejsy, moduลy i przestrzenie nazw, ale funkcje nadal odgrywajฤ waลผnฤ rolฤ. Rรณลผnica miฤdzy funkcjฤ w JavaSkrypt i TypeScript to typy parametrรณw i zwracane dostฤpne w TypeScript funkcja.
JavaFunkcja skryptu:
function add (a1, b1) {
return a1+b1;
}
TypeScript funkcjonowaฤ:
function add(a1 : number, b1: number) : number { return a1 + b1; }
W powyลผszej funkcji nazwa funkcji to add, a parametry to a1 oraz b1, oba typu liczbowego, a typem zwracanym jest rรณwnieลผ liczba. Jeลli przekaลผesz ciฤ g znakรณw do funkcji, zgลosi ona bลฤ d kompilacji podczas kompilacji do JavaScenariusz.
Wywoลanie funkcji: add
let x = add(5, 10); // will return 15 let b = add(5); // error TS2554: Expected 2 arguments, but got 1 let c = add(3,4,5); // error TS2554: Expected 2 arguments, but got 3 let t = add("Harry", "John"); // error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'
Parametry a1 oraz b1 Sฤ obowiฤ zkowe i ich niepodanie spowoduje bลฤ d. Typy parametrรณw i typ zwracany sฤ rรณwnie waลผne i nie moลผna ich zmieniฤ po zdefiniowaniu.
Opcjonalne parametry funkcji
In JavaSkrypt, wszystkie parametry funkcji sฤ opcjonalne i sฤ uznawane za niezdefiniowane, jeลli nie zostanฤ przekazane. To samo nie dotyczy TypeScriptPo zdefiniowaniu parametrรณw naleลผy je podaฤ. Jeลli chcesz, aby parametr byล opcjonalny, dodaj znak zapytania po nazwie parametru, jak pokazano poniลผej:
function getName(firstname: string, lastname?: string): string { return firstname + lastname; } let a = getName("John"); // returns Johnundefined let b = getName("John", "Harry"); // returns JohnHarry let c = getName("John", "H", "Harry"); // error TS2554: Expected 1-2 arguments, but got 3
Naleลผy pamiฤtaฤ, ลผe parametry opcjonalne muszฤ zostaฤ zdefiniowane na koลcu. Pierwszy parametr nie moลผe byฤ opcjonalny, a drugi obowiฤ zkowy, poniewaลผ kompilator nie wiedziaลby, ktรณra wartoลฤ zostaลa podana.
Przypisz wartoลci domyลlne do parametrรณw
Moลผesz przypisaฤ parametrom wartoลci domyลlne, jak pokazano poniลผej:
function getName(firstname: string, lastname = "Harry"): string { return firstname + lastname; } let a = getName("John"); // will return JohnHarry let b = getName("John", "H"); // will return JohnH
Podobnie jak w przypadku parametrรณw opcjonalnych, domyลlne zainicjowane parametry muszฤ zostaฤ umieszczone na koลcu listy parametrรณw.
Parametry spoczynkowe
Widziaลeล jak TypeScript Obsลuguje parametry obowiฤ zkowe, parametry opcjonalne i parametry wartoลci domyลlnych. Teraz przyjrzymy siฤ parametrom resztowym. Parametry resztowe to grupa parametrรณw opcjonalnych zdefiniowanych razem, przy uลผyciu trzech kropki (โฆ) po ktรณrej nastฤpuje nazwa parametru, ktรณry jest tablicฤ .
Skลadnia parametrรณw spoczynkowych:
function testFunc(a: string, ...arr: string[]) :string { return a + arr.join(""); }
Jak pokazano powyลผej, parametr rest to tablica poprzedzona trzema kropkami. Tablica bฤdzie zawieraฤ wszystkie pozostaลe argumenty przekazane do funkcji.
Przykลad:
let a = testFunc("Monday", "Tuesday", "Wednesday", "Thursday"); // output is MondayTuesdayWednesdayThursday
Funkcje strzaลek
Funkcja strzaลki to jedna z waลผnych funkcji udostฤpnionych w ES6 i jest dostฤpna w TypeScript teลผ. W skลadni jest gruba strzaลka, od ktรณrej pochodzi nazwa.
Funkcja strzaลkowa Skลadnia:
var nameoffunction = (params) => {
// code here
}
Do czego sลuลผy funkcja strzaลkowa?
Przyjrzyjmy siฤ przykลadowi, aby zrozumieฤ przypadek uลผycia funkcji strzaลkowej.
Przykลad:
var ScoreCard = function () { this.score = 0; this.getScore = function () { setTimeout(function () { console.log(this.score); // gives undefined }, 1000); } } var a = new ScoreCard(); a.getScore();
Utworzyลeล funkcjฤ z wลaลciwoลciฤ score zainicjowanฤ wartoลciฤ 0 oraz metodฤ getScore, ktรณra wewnฤtrznie uลผywa setTimeout i po jednej sekundzie rejestruje this.score. Zalogowana wartoลฤ jest niezdefiniowana, mimo ลผe this.score jest zdefiniowane i zainicjowane. Problem leลผy w to Sลowo kluczowe. Funkcja wewnฤ trz setTimeout ma wลasne this, a poniewaลผ score nie jest w niej zdefiniowany, wynik jest niezdefiniowany.
To samo moลผna zrobiฤ za pomocฤ funkcji strzaลkowej, jak pokazano poniลผej:
var ScoreCard = function () { this.score = 0; this.getScore = function () { setTimeout(() => { console.log(this.score); // you get 0 }, 1000); } } var a = new ScoreCard(); a.getScore();
Funkcja strzaลkowa nie ma wลasnej to, a zamiast tego wspรณลdzieli zmiennฤ z zakresu nadrzฤdnego, wiฤc zmienne zadeklarowane poza zakresem sฤ dostฤpne za pomocฤ this w funkcji strzaลkowej. Sฤ one przydatne ze wzglฤdu na krรณtszฤ skลadniฤ, a takลผe w przypadku wywoลaล zwrotnych, procedur obsลugi zdarzeล i funkcji czasowych.
TypeScript Enums
A TypeScript enum to obiekt przechowujฤ cy zbiรณr powiฤ zanych ze sobฤ wartoลci, przechowywanych razem. JavaSkrypt nie obsลuguje natywnie typรณw wyliczeniowych. Wiฤkszoลฤ jฤzykรณw programowania, takich jak Java, C i C++ obsลuguje wyliczenia i TypeScript udostฤpnia je rรณwnieลผ. Wyliczenia definiuje siฤ za pomocฤ sลowa kluczowego enum.
Jak zadeklarowaฤ Enum?
Skลadnia:
enum NameofEnum {
value1,
value2,
..
}
Przykลad: Wyliczenie
enum Directions { North, South, East, West }
W powyลผszym przykลadzie zdefiniowano wyliczenie o nazwie โDrogiโ z wartoลciami โPรณลnocโ, โPoลudnieโ, โWschรณdโ i โZachรณdโ. Wartoลci sฤ numerowane od 0 dla pierwszego wpisu i zwiฤkszajฤ siฤ o 1 dla kaลผdego kolejnego wpisu.
Deklarowanie wyliczenia z wartoลciฤ liczbowฤ
Domyลlnie, jeลli elementowi wyliczenia nie zostanie podana wartoลฤ, przyjmuje on liczbฤ, zaczynajฤ c od 0. Poniลผszy przykลad pokazuje wyliczenie z jawnymi wartoลciami liczbowymi.
enum Directions {
North = 0,
South = 1,
East = 2,
West = 3
}
Moลผesz rรณwnieลผ przypisaฤ wartoลฤ poczฤ tkowฤ , a kolejne elementy otrzymajฤ wartoลci zwiฤkszone. Na przykลad:
enum Directions {
North = 5,
South, // will be 6
East, // 7
West // 8
}
Pรณลnoc zaczyna siฤ od 5, wiฤc Poลudnie ma 6, Wschรณd 7, a Zachรณd 8.
Zamiast wartoลci domyลlnych moลผesz rรณwnieลผ przypisaฤ wartoลci wedลug wลasnego wyboru. Na przykลad:
enum Directions {
North = 5,
South = 4,
East = 6,
West = 8
}
Jak uzyskaฤ dostฤp do Enum?
Poniลผszy przykลad pokazuje, jak uลผywaฤ wyliczeล w kodzie:
enum Directions { North, South, East, West } console.log(Directions.North); // output is 0 console.log(Directions["North"]); // output is 0 console.log(Directions[0]); // output is North
Skompilowany JavaSkrypt wyglฤ da nastฤpujฤ co:
var Directions;
(function (Directions) {
Directions[Directions["North"] = 0] = "North";
Directions[Directions["South"] = 1] = "South";
Directions[Directions["East"] = 2] = "East";
Directions[Directions["West"] = 3] = "West";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);
Poniewaลผ JavaSkrypt nie obsลuguje wyliczeล, kompilator konwertuje wyliczenie na funkcjฤ samowywoลujฤ cฤ , jak pokazano powyลผej. Podwรณjne przypisanie tworzy mapฤ odwrotnฤ .ping od numeru z powrotem do nazwy.
Deklarowanie wyliczenia z wartoลciฤ ciฤ gu
Moลผesz przypisaฤ wybrane przez siebie wartoลci ciฤ gรณw, jak pokazano w poniลผszym przykลadzie.
Przykลad:
enum Directions { North = "N", South = "S", East = "E", West = "W" } console.log(Directions.North); // output is N console.log(Directions["North"]); // output is N console.log(Directions[0]); // output is undefined
Skompilowany JavaSkrypt wyglฤ da nastฤpujฤ co:
var Directions;
(function (Directions) {
Directions["North"] = "N";
Directions["South"] = "S";
Directions["East"] = "E";
Directions["West"] = "W";
})(Directions || (Directions = {}));
console.log(Directions.North);
console.log(Directions["North"]);
console.log(Directions[0]);
โ ๏ธ Ostrzeลผenie: Wyliczenia ลaลcuchowe nie majฤ
mapy odwrotnejpingPorรณwnaj dwa powyลผsze skompilowane wyniki: wyliczenie numeryczne przechowuje dane w obu kierunkach, podczas gdy wyliczenie ลaลcuchowe przechowuje tylko dane od nazwy do wartoลci. Dlatego Directions[0] zwraca wartoลฤ undefined dla ciฤ
gu wyliczeniowego.
W czym znajdujฤ siฤ moduลy TypeScript?
Pliki utworzone w TypeScript Majฤ dostฤp globalny, co oznacza, ลผe โโzmienne zadeklarowane w jednym pliku sฤ dostฤpne w innym pliku. Ten globalny charakter moลผe powodowaฤ konflikty kodu i problemy w czasie wykonywania. Funkcjonalnoลฤ moduลรณw eksportu i importu moลผe byฤ wykorzystana do unikniฤcia konfliktรณw zmiennych globalnych i funkcji. Ta funkcja pojawiลa siฤ wโฆ JavaSkrypt z wydaniem ES6, ktรณry jest rรณwnieลผ obsลugiwany w TypeScript.
Dlaczego potrzebujesz moduลรณw w TypeScript?
Poniลผszy przykลad ilustruje problem bez moduลรณw.
Przykลadowy test1.ts
let age : number = 25;
Zdefiniowaลeล zmiennฤ wiek numeru typu w test1.ts.
Przykลadowy test2.ts
W pliku test2.ts moลผna uzyskaฤ dostฤp do zmiennej wiek zdefiniowano w test1.ts i zmodyfikowano go, jak pokazano poniลผej:
age = 30; // changed from 25 to 30. let _new_age = age;
Moลผe to stwarzaฤ wiele problemรณw, poniewaลผ zmienne sฤ dostฤpne globalnie i moลผna je modyfikowaฤ z dowolnego miejsca.
Z ModuลyNapisany kod pozostaje lokalny dla pliku i nie moลผna uzyskaฤ do niego dostฤpu spoza niego. Aby udostฤpniฤ cokolwiek z pliku, naleลผy go wyeksportowaฤ za pomocฤ sลowa kluczowego export. Export uลผywa siฤ, gdy zmienna, klasa, funkcja lub interfejs ma byฤ uลผyta w innym pliku. import Sลuลผy do uzyskiwania dostฤpu do wyeksportowanego elementu. Dziฤki temu kod pozostaje nienaruszony w pliku i nawet jeลli zdefiniujesz te same nazwy zmiennych, nie zostanฤ one pomylone.
Korzystanie z eksportu i importu
Istnieje wiele sposobรณw eksportowania i importowania. Omรณwimy skลadniฤ, ktรณra jest najczฤลciej uลผywana.
Skลadnia importu i eksportu 1:
export nameofthevariable or class name or interface name etc
//To import the above variable or class name or interface you have to use import as shown below:
import {nameofthevariable or class name or interfacename} from "file path here without .ts"
Oto dziaลajฤ cy przykลad wykorzystania eksportu i importu.
test1.ts
export let age: number = 25;
Sลowo kluczowe export sลuลผy do udostฤpniania zmiennej wieku innemu plikowi.
test2.ts
import { age } from "./test1"
let new_age :number = age;
Sลowo kluczowe import sลuลผy do uzyskania dostฤpu do wiek zmiennฤ i musisz okreลliฤ lokalizacjฤ pliku, jak pokazano powyลผej.
Skลadnia importu i eksportu 2:
Istnieje inny sposรณb eksportowania i importowania, ktรณrego skลadnia jest przedstawiona poniลผej:
export = classname;
import classname = require("file path of modulename")
Kiedy uลผywasz eksport = Aby wyeksportowaฤ moduล, naleลผy uลผyฤ polecenia importu (โลcieลผka pliku modulenameโ).
Oto dziaลajฤ cy przykลad ilustrujฤ cy ten przypadek.
Klient.ts
class Customer { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } getName(): string { return this.name; } } export = Customer;
testKlient.ts
import Customer = require("./Customer"); let a = new Customer("Harry", 30); alert(a.getName());
Moduล ลadujฤ cy
Moduลy nie mogฤ dziaลaฤ samodzielnie, dlatego potrzebny jest program ลadujฤ cy moduลy, aby zlokalizowaฤ zaleลผnoลci importu, jak pokazano w TypeScript Przykลady powyลผej. Dostฤpne sฤ moduลy ลadujฤ ce CommonJS dla Nodejs i Require.js do uruchamiania w przeglฤ darce.
Aby skompilowaฤ kod przy uลผyciu formatu moduลu CommonJS, uลผyj nastฤpujฤ cego polecenia:
tsc --module commonjs testCustomer.ts
Aby skompilowaฤ kod przy uลผyciu formatu moduลu Requirejs, uลผyj nastฤpujฤ cego polecenia:
tsc --module amd testCustomer.ts
Za pomocฤ powyลผszego polecenia pliki zaleลผne zostanฤ przekonwertowane na pliki js.
Przykลadowy plik testCustomer.ts do pliku testCustomer.js przy uลผyciu Requirejs
define(["require", "exports", "./Customer"], function (require, exports, Customer) {
"use strict";
exports.__esModule = true;
var a = new Customer("Harry", 30);
alert(a.getName());
});
Przykลadowy plik Customer.ts do Customer.js przy uลผyciu Requirejs
define(["require", "exports"], function (require, exports) {
"use strict";
var Customer = /** @class */ (function () {
function Customer(name, age) {
this.name = name;
this.age = age;
}
Customer.prototype.getName = function () {
return this.name;
};
return Customer;
}());
return Customer;
});
Aby przetestowaฤ dziaลanie require.js, naleลผy utworzyฤ plik o nazwie main.js, ktรณry odwoลuje siฤ do zaleลผnoลci w sposรณb pokazany poniลผej.
Oto struktura folderรณw:
src/
Customer.js
testCustomer.js
main.js
require.js // you can get this file from github or npm install requirejs
test.html
main.js
define(function (require) {
var customer = require("./Customer");
var testCustomer = require("./testCustomer");
});
test.html
<!DOCTYPE html>
<html>
<head>
<title>TypeScript Module testing using Requirejs</title>
<script data-main="main" src="require.js"></script>
</head>
<body>
<h3>Testing modules using Requirejs</h3>
</body>
</html>
Przestrzenie nazw w TypeScript
Przestrzeล nazw przechowuje zbiรณr klas, interfejsรณw, zmiennych i funkcji w jednym pliku.
Skลadnia przestrzeni nazw
namespace name{
export class {
}
export interface {
}
export const constname;
}
Powiฤ zany kod jest dostฤpny w jednej przestrzeni nazw.
Przykลad dziaลania przestrzeni nazw: testnamespace.ts
namespace StudentSetup { export interface StudDetails { name: string; age: number; } export function addSpace(str) { // will add space to the string given return str.split("").join(" "); } export class Student implements StudDetails { name: string; age: number; constructor(studentdetails: StudDetails) { this.name = studentdetails.name; this.age = studentdetails.age; } getName(): string { return this.name; } } }
Nazwa przestrzeni nazw to Konfiguracja studentai dodaลeล interfejs StudDetails, funkcjฤ addSpace i klasฤ o nazwie Student.
Dostฤp do przestrzeni nazw
Poniลผej znajduje siฤ kod, w ktรณrym uลผywasz przestrzeni nazw Konfiguracja studenta.
testStudentSetup.ts
let a = new StudentSetup.Student({ name: "Harry", age: 20 }); console.log("The name is :" + StudentSetup.addSpace(a.getName()));
Do klasy, interfejsu lub funkcji dostฤpnej w przestrzeni nazw naleลผy odwoลywaฤ siฤ za pomocฤ nazwy przestrzeni nazw, na przykลad StudentSetup.addSpace aby uzyskaฤ dostฤp do funkcji i Konfiguracja ucznia. Student aby uzyskaฤ dostฤp do klasy.
Moลผesz skompilowaฤ oba pliki do jednego pliku js, jak pokazano poniลผej:
tsc --outFile namespace.js testnamespace.ts testStudentSetup.ts
Sprawdลบ wynik w wierszu poleceล, korzystajฤ c z poniลผszego polecenia:
node namespace.js
Wyjลcie:
The name is :H a r r y
Deklaracje otoczenia w TypeScript
TypeScript pozwala na korzystanie z usลug stron trzecich JavaPliki skryptรณw z wykorzystaniem deklaracji ambient. Zaletฤ tej funkcji jest to, ลผe nie trzeba przepisywaฤ biblioteki, a mimo to moลผna korzystaฤ ze wszystkich jej funkcji z weryfikacjฤ typu. TypeScript.
Skลadnia otoczenia
Aby zadeklarowaฤ moduล ambient:
declare module moduleName {
//code here
}
Plik ambient naleลผy zapisaฤ jako:
filename.d.ts
Aby skorzystaฤ z pliku nazwapliku.d.ts w pliku .ts naleลผy odwoลaฤ siฤ do niego w nastฤpujฤ cy sposรณb:
/// <reference path="filename.d.ts"/>
Deklaracja typu otoczenia w TypeScript odwoลuje siฤ do biblioteki innej firmy i ponownie deklaruje wymagane funkcje, uลผywajฤ c wลasnych typรณw. Rozwaลผmy na przykลad maลy JavaPoniลผej znajduje siฤ biblioteka skryptรณw.
Third Party JavaPlik skryptu: testString.js
var StringChecks = { isString: function (str) { return typeof str === "string"; }, convertToUpperCase: function (str) { return str.toUpperCase(); }, convertToLowerCase: function (str) { return str.toLowerCase(); }, convertToStringBold: function (str) { return str.bold(); } };
Masz obiekt o nazwie StringChecks, ktรณry ma funkcje isString, convertToUpperCase, convertToLowerCase i convertToStringBold.
Tworzenie moduลu otoczenia w TypeScript
Teraz utworzymy moduล ambient, ktรณry odwoลuje siฤ do JavaSkrypt dziaลa jak opisano powyลผej i w razie potrzeby dodaje sprawdzenie typu.
Nazwa pliku: tstring.d.ts
declare module TestString { export interface StringsFunc { isString(str: string): boolean; convertToUpperCase(str: string): string; convertToLowerCase(str: string): string; convertToStringBold(str: string): string; } } declare var StringChecks: TestString.StringsFunc;
Definiujesz moduล o nazwie TestString i eksportujesz interfejs StringsFunc. Kaลผdy podpis okreลla, co funkcja akceptuje i zwraca:
- isString(str:string): wartoลฤ logiczna โ przyjmuje ciฤ g znakรณw i zwraca wartoลฤ logicznฤ . Przekazanie liczby lub innego typu powoduje bลฤ d kompilacji.
- convertToUpperCase(str: string): string โ przyjmuje ciฤ g znakรณw i zwraca ciฤ g znakรณw.
- convertToLowerCase(str: string): string โ przyjmuje ciฤ g znakรณw i zwraca ciฤ g znakรณw.
- konwertujToStringBold(str:string): ciฤ g โ przyjmuje ciฤ g znakรณw i zwraca ciฤ g znakรณw.
Poniewaลผ JavaPlik skryptu ujawnia nazwฤ obiektu StringChecks, do tej samej nazwy odwoลujemy siฤ ostatecznie w pliku .d.ts:
declare var StringChecks: TestString.StringsFunc;
Korzystanie z moduลu Ambient w TypeScript
Oto plik test.ts, ktรณry wykorzystuje plik ambient tstring.d.ts.
/// <reference path="tstring.d.ts"/> let str1 = StringChecks.isString("Hello World"); console.log(str1); let str2 = StringChecks.convertToUpperCase("hello world"); console.log(str2); let str3 = StringChecks.convertToLowerCase("HELLO"); console.log(str3); let str4 = StringChecks.convertToStringBold("Hello World"); console.log(str4);
Kompiluj za pomocฤ tsc test.ts, aby utworzyฤ test.js:
/// <reference path="tstring.d.ts"/>
var str1 = StringChecks.isString("Hello World");
console.log(str1);
var str2 = StringChecks.convertToUpperCase("hello world");
console.log(str2);
var str3 = StringChecks.convertToLowerCase("HELLO");
console.log(str3);
var str4 = StringChecks.convertToStringBold("Hello World");
console.log(str4);
Teraz moลผesz uลผywaฤ pliku test.js w pliku HTML razem z plikiem biblioteki testString.js.
<html>
<head>
<title>Test TypeScript Ambient</title>
<script src="testString.js"></script>
<script src="test.js"></script>
</head>
<body>
</body>
</html>
Wyjลcie:
true HELLO WORLD hello <b>Hello World</b>
๐ก Wskazรณwka: W przypadku popularnych bibliotek rzadko trzeba samodzielnie pisaฤ plik .d.ts. Zamiast tego zainstaluj typy zarzฤ
dzane przez spoลecznoลฤ, na przykลad. npm install --save-dev @types/lodash, a kompilator automatycznie je wychwytuje.
Aby kontynuowaฤ, porรณwnaj bezpoลrednio oba jฤzyki TypeScript vs JavaScenariusz, ponownie odwiedziฤ JavaMetody tablicowe skryptรณw w przypadku nietypowanych odpowiednikรณw uลผytych tutaj i przestudiuj zapฤtla siฤ JavaScenariusz oraz wewnฤtrzny i zewnฤtrzny JavaScenariusz w przypadku podstawowych funkcji przeglฤ darki, na ktรณrych opiera siฤ skompilowany wynik.


