TypeScript Handledning: Vad är, Interface, Enum, Array med exempel

Vad är TypeScript?

TypeScript är en superset av JavaManus. TypeScript är rent objektorienterat programmeringsspråk som stöder klasser, gränssnitt etc. Det är ett språk med öppen källkod utvecklat av Microsoft som statiskt kompilerar koden till JavaManus. Det kan enkelt köras i en webbläsare eller Nodejs.

Alla de senaste funktionerna som släppts för ECMAScript stöds i TypeScript och utöver det TypeScript har sina egna objektorienterade funktioner som gränssnitt, omgivningsdeklaration, klassarv, etc. som hjälper till att utveckla en stor applikation som annars skulle vara svår att göra i JavaScript.

Hur man laddar ner och installerar TypeScript

Här är steg-för-steg-processen för att ladda ner och installera TypeScript:

Steg 1) Ladda ner och installera Nodejs

Gå till den officiella webbplatsen för nodejs: https://nodejs.org/en/download/ och ladda ner och installera nodejs enligt ditt operativsystem. Den detaljerade instruktionen om hur man laddar ner nodejs finns här: https://www.guru99.com/download-install-node-js.html

Steg 2) Kontrollera Nodejs och npm-versionen

För att kontrollera om nodejs och npm är installerade, kolla bara versionen i din kommandotolk.

D:\typeproject>node --version
V10.15.1

D:\typeproject>npm --version
6.4.1

Så du har nodejs v10 och npm 6 installerade.

Steg 3) TypeScript Installation

Skapa din projektkatalog typproject/ och kör npm init, som visas i kommandot nedan:

npm init

Steg 4) Starta installationen

Nu kommer vi att skapa paketet .json som lagrar beroenden för vårt projekt.

När installationen är klar TypeScript enligt följande:

npm -g install typescript

Ovanstående kommando tar hand om installationen TypeScript. Att lägga till "-g" till npm install kommer att installeras TypeScript globalt. Fördelen med att använda -g är att du kommer att kunna använda TypeScript TSC kommandot från vilken katalog som helst när den är installerad globalt. Om du inte vill installera TypeScript globalt använd nedanstående kommando:

npm --save install typescript

Skapa src/-mappen i din projektkatalog och i src/-mappen skapa TypeScript fil test.ts och skriv din kod.

Exempel: test.ts

function add(x:number, y:number) {
	return x+y;
}

let sum = add(5,10);
console.log(sum);

Sammanställa TypeScript kod till Javascript

För att kompilera ovanstående kod använd följande kommando:

If TypeScript är installerat globalt använd nedanstående kommando:

tsc test.ts

If TypeScript är installerat lokalt för ditt projekt du behöver använda sökvägen till TypeScript från node_modules som visas:

node_modules/typescript/bin/tsc test.ts

Kommandot ovan skapar en test.js-fil och kommer att ha kod kompilerad till javascript.

Exempel: test.js

function add(x, y) {
    return x + y;
}
var sum = add(5, 10);
console.log(sum);

Utförande Javascript använder Nodejs

I detta TypeScript tutorial kommer vi att köra test.js i nodejs enligt följande:

D:\typeproject\src>node test.js
15

Värdet som tröstas visas när test.js körs

Utförande JavaSkript i webbläsaren

Exempelvis:

<html>
<head></head>
<body>
<script type="text/javascript" src="test.js"></script>
</body>
</html>

Utförande Javascript använder Nodejs

Sammanställa TypeScript kod till Javascript använder EcmaScript-versionen

TypeScript stöder alla Ecmascript-funktioner som släppts, och utvecklare kan använda samma när de kodar. Men inte alla nya funktioner stöder i äldre webbläsare, på grund av vilka du behöver kompilera javascript till en äldre version av Ecmascript. TypeScript ger kompilatoralternativ som kan göra det.

Exempel: test.ts

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

För att kompilera till den ES-version du väljer kan du använda alternativet target eller t i ditt kommando enligt följande:

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

Som standard är målet ES3. Om du vill ändra det kan du använda kommandot ovan.

För närvarande kommer vi att använda ES6 i detta TypeScript handledning som mål:

tsc --target ES6  test.ts

test.ts till test.js

var addnumbers = (a, b) => {
    return a+b;
}

addnumbers(10, 20);

Koden förblir som den är, eftersom pilfunktionen du har använt är en ES6-funktion och densamma när den kompileras till ES6 ändras inte.

Som standard är målet ES3 så utan mål får du test.js som:

var addnumbers = function (a, b) {
    return a + b;
};
addnumbers(10, 20);

Så här borta ändras fettpilen till en normal anonym funktion.

Variabler i TypeScript

variabler används för att lagra värden, och värdet kan vara en sträng, tal, boolesk eller ett uttryck. När det gäller variabler i TypeScript, de liknar JavaScript. Så låt oss lära oss att deklarera och tilldela värde till variabler i TypeScript.

Variabler kan inte användas i kod utan att definiera. För att deklarera en variabel kan du använda

var nyckelord,

Låt sökord

const sökord

Arbeta med variabler i TypeScript liknar javascript, och användare som är bekanta med javascript kommer att tycka att det är väldigt enkelt. Bara variabler som Låt och const används inte mycket i jämförelse med var.

Deklarera variabler med var

Syntax:

var firstname = "Roy";

Låt oss ta en titt på några TypeScript exempel för att förstå hur nyckelordet var fungerar och även omfattningen av variabler som deklareras med hjälp av var nyckelord.

Exempel 1:

var  k = 1; // variable k will have a global scope

function test() {
    var c = 1; // variable c is local variable and will be accessible inside function test, it will not be available outside the function.
    return k++;
}

test(); // output as  1
test(); // output as 2
alert(c); // will throw error , Uncaught ReferenceError: c is not defined

Exempel 2:

var t = 0; // variable t is declared in global scope.
function test() {    
    var t = 10; //variable t is again redeclared inside function with value 10, so here t is local to the function and changes done to it will remain inside the function.
    return t;
}
test(); // will return 10.
console.log(t); // will console 0.

Exempel 3:

var i = 0;
function test() {
    if (i>0) {
      var t = 1;
    }
    return t;
}

test(); // the value returned will be undefined. The if-block has the variable which gets executed when I> 0. Over here the if-block is not expected but you are still having a reference to the variable t, and it returns undefined, this is because var defined variables once defined inside a function will have reference to it inside the function.  
i++; // here value of i is incremented.
test(); // since i >0 the if block is executed and value returned is 1.

Deklarera variabler med let

Ocuco-landskapet TypeScript syntax för let är enligt nedan:

Syntax:

let name="Roy";

Arbetet med Låt variabel är nästan samma som var, men med en liten skillnad och kommer att förstå detsamma med en TypeScript exempel.

Exempelvis:

let i = 1;
function test() {
    if (i>0) {
	  let t = 1;
    }
    return t;
}

test(); // throws an error : Uncaught ReferenceError: t is not defined.

Ovanför TypeScript exemplet ger ett fel, men detsamma skulle ha fungerat bra om det var med var nyckelord. Variabler använder Låt är tillgängliga inom det deklarerade blockomfånget, till exempel är variabeln t endast tillgänglig i if-blocket och inte för hela funktionen.

Även om du råkar deklarera en variabel i någon funktion, eller for-loop, while-loop, TypeScript switchblock, kommer det att vara tillgängligt för dig endast inom det blocket och ingen referens till det utanför blocket, och det kommer att ge ett fel om variabeln används utanför blocket. Detta är huvudskillnaden mellan var och let nyckelordsdeklarerade variabler.

Deklarera variabler med hjälp av const

Const betyder konstanta variabler. De liknar låtvariabler, med den enda skillnaden är att när ett värde väl har tilldelats det inte kan ändras.

Syntax:

const name;

Exempelvis:

const age = "25"; 
age="30"; // will throw an error : Uncaught TypeError: Assignment to constant variable.

Så användare kan bara använda const-variabler i de fall de vet att de inte behöver ändra värdena som tilldelats den.

Skriver in TypeScript

TypeScript är ett starkt maskinskrivet språk, medan javascript inte är det. En variabel som har ett värde definierat som en sträng kan ändras till ett tal utan problem Javascript. Detsamma tolereras inte i TypeScript. I TypeScript, typen till en variabel definieras endast i början och genom exekveringen måste den bibehålla samma typ. Alla ändringar av den kommer att leda till ett kompileringsfel under kompileringen till javascript.

Följande är typerna:

  • Antal
  • Sträng
  • Boolean
  • Vilken som helst
  • Ogiltig

Antal

Tar bara heltal, flöten, bråk osv.

Syntax:

let a :number = 10;
let marks :number = 150;
let price :number = 10.2;

Här är några viktiga metoder som kan användas på nummertyper:

toFixed() – det kommer att konvertera talet till en sträng och kommer att behålla decimaler som ges till metoden.

att stränga () – den här metoden konverterar tal till en sträng.

värdet av() – denna metod kommer att ge tillbaka det primitiva värdet av talet.

toPrecision() – denna metod kommer att formatera numret till en angiven längd.

Exempel: med alla strängmetoder

let _num :number = 10.345;
_num.toFixed(2); // "10.35"
_num.valueOf(); // 10.345
_num.toString(); // "10.345"
_num.toPrecision(2); //"10"

Sträng

Sträng: endast strängvärden

Syntax:

let str :string = "hello world";

Här är några viktiga metoder som kan användas på strängtyper:

  • delas() – denna metod kommer att dela upp strängen i en array.
  • charAt() – denna metod ger det första tecknet för det angivna indexet.
  • index för() – denna metod kommer att ge positionen för den första förekomsten för värdet som ges till den.
  • ersätta () – den här metoden tar 2 strängar, först värdet för att söka i strängen och om det finns kommer det att ersätta det med den 2:a och kommer att ge en ny sträng tillbaka.
  • Trim () – den här metoden tar bort vita mellanslag från båda sidor av strängen.
  • substr() – denna metod kommer att ge en del av strängen som kommer att bero på positionen som anges som start och slut.
  • delsträng() – denna metod kommer att ge en del av strängen som kommer att bero på positionen som anges som start och slut. Tecknet i slutpositionen kommer att exkluderas.
  • till versaler() -kommer att konvertera strängen till versaler
  • till LowerCase() – konverterar strängen till gemener.

Exempelvis:

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 is the value does not exist in the string.
_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

Accepterar logiska värden som sant, falskt, 0 och 1.

Syntax:

let bflag :boolean = 1;
let status :boolean = true;

Vilken som helst

Syntax:

let a :any = 123
a = "hello world"; // changing type will not give any error.

Variabler som deklareras med hjälp av vilken som helst typ kan ta variabeln som en sträng, nummer, array, boolean eller void. TypeScript kommer inte att kasta några kompileringsfel; detta liknar de variabler som deklareras i JavaManus. Använd valfri typvariabel endast när du inte är säker på vilken typ av värde som kommer att associeras med den variabeln.

Ogiltig

Void typ används mest som en returtyp på en funktion som inte har något att returnera.

Syntax:

function testfunc():void{
 //code here
}

TypeScript array

An array in TypeScript är en datatyp där du kan lagra flera värden. Låt oss lära oss hur man deklarerar och tilldelar värden för Array-operationer i TypeScript.

Eftersom TypeScript är ett starkt skrivet språk, måste du tala om vad som kommer att vara datatypen för värdena i en array. Annars kommer den att betrakta den som vilken typ som helst.

Deklarera och initiera en array

Syntax:

let nameofthearray : Array<typehere>

Exempelvis

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 will all numbers

let month_year: Array<string | number> = ["Jan", 2015, "Feb", 2016]; //array with string and numbers mixed.

let alltypes: Array<any> = [true, false, "Harry", 2000, { "a": "50", "b": "20" }]; //array of all types boolean, string , number , object etc.

Olika sätt att komma åt element från en array

För att hämta elementen från en array börjar värdena från index 0 till längden på arrayen.

Exempelvis:

let years: Array<number> = [ 2016, 2017, 2018, 2019]; //array will all numbers			
years[0]; // output will be 2016			
years[1]; // output will be 2017			
years[2]; // output will be 2018			
years[3]; // output will be 2019

Du kan också hämta elementen från en array med hjälp av TypeScript för slinga enligt nedanstående:

Använda TypeScript för slinga

let years: Array<number> = [ 2016, 2017, 2018, 2019]; 
for (let i=0;i<=years.length; i++) {
     console.log(years[i]);
}
Output:
2016
2017
2018
2019

Använder for-in loop

let years: Array<number> = [ 2016, 2017, 2018, 2019]; 
for (let i in years) {
     console.log(years[i])
}

Output:
2016
2017
2018
2019

Använder för-av loop

let years: Array<number> = [ 2016, 2017, 2018, 2019]; 
for (let  i of years) {
     console.log(i)
}
Output:
2016
2017
2018
2019

Använder varje slinga

let years: Array<number> = [ 2016, 2017, 2018, 2019]; 
years.forEach(function(yrs, i) {
  console.log(yrs);
});
Output:
2016
2017
2018
2019

TypeScript Array-metoder

TypeScript Array-objekt har många egenskaper och metoder som hjälper utvecklare att hantera arrayer enkelt och effektivt. Du kan få värdet på en egenskap genom att ange arrayname.property och utdata från en metod genom att ange array name.method().

längd egendom

=> Om du vill veta antalet element i en array kan du använda egenskapen length.

Reverse metod

=> Du kan vända ordningen på objekt i en array med en omvänd metod.

Sorteringsmetod

=> Du kan sortera objekten i en array med hjälp av sorteringsmetoden.

Popmetod

=> Du kan ta bort det sista objektet i en array med en pop-metod.

Shift metod

=> Du kan ta bort det första objektet i en array med skiftmetoden.

Push-metod

=> Du kan lägga till värde som det sista objektet i arrayen.

concat-metod

=> Du kan sammanfoga två arrayer till ett arrayelement.

Exempel på längdegenskap

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; //array with all string values.

console.log(months.length);  // 12

Exempel på omvänd metod

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; //array with all string values.

console.log(months.reverse());  //  ["Dec", "Nov", "Oct", "Sept", "Aug", "July", "June", "May", "April", "March", "Feb", "Jan"]

Exempel på sorteringsmetod

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; //array with all string values.

console.log(months.sort()); // ["April", "Aug", "Dec", "Feb", "Jan", "July", "June", "March", "May", "Nov", "Oct", "Sept"]

Exempel på popmetod

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; //array with all string values.				

console.log(months.pop()); //Dec

Exempel på skiftmetod

let months: Array<string> = ["Jan", "Feb", "March", "April", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; //array with all string values.			

console.log(months.shift()); // Jan

Exempel på push-metod

let years: Array<number> = [2015, 2016, 2017, 2018, 2019]; //array will all numbers			
console.log(years.push(2020)); 			
years.forEach(function(yrs, i) {			
  console.log(yrs); // 2015 , 2016,2017, 2018, 2019,2020				
});

Exempel på konkatmetod

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]

Klass i TypeScript

TypeScript är en superset av JavaSkript, så vad som helst möjligt att göra i JavaSkript är också möjligt i TypeScript. Klass är en ny funktion som lagts till från ES6 och framåt, så tidigare JavaSkript klasstypsfunktionaliteten provades med en funktion med prototypfunktionalitet för att återanvända kod. Med hjälp av klass kan du ha vår kod nästan nära språk som java, c#, python, etc., där koden kan återanvändas. Med inslaget av klass i TypeScript/JavaManus, det gör språket väldigt kraftfullt.

Definiera en klass i TypeScript

Här är en grundläggande klasssyntax i TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }
 
   //define methods for class
}

Exempel: Ett fungerande exempel på Class

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

I exemplet ovan har du en klass som heter Studenter. Den har egenskaper ålder, namn och roll_no.

Konstruktör i en TypeScript Klass

Klassstudentexemplet vi har definierat ovan, det har en konstruktor som visas nedan:

constructor(age: number, name:string, roll_no: number) {
        this.age = age;
        this.name = name;
        this.roll_no = roll_no;
    }

Konstruktormetoden har parametrar ålder, namn och roll_no. Konstruktören kommer att ta hand om att initiera egenskaperna när klassen anropas. Fastigheterna nås med hjälp av detta nyckelord. Exempel this.age för att komma åt egendomen ålder, this.roll_no för att komma åt roll_no, etc. Du kan också ha en standardkonstruktor, som visas nedan:

constructor () {}

Metoder inuti en TypeScript Klass

Klass Studentexemplet finns metoder definierade till exempel getRollNo(), getName(), getAge() som används för att ge detaljer om egenskaper roll_no, namn och ålder.

getRollNo(): number {
        return this.roll_no;
}

getName() : string {
	return this.name;
}

getAge() : number {
	return this.age;
}

Skapa instans av klass i TypeScript

Exempelvis:

In TypeScript för att skapa en instans av en klass måste du använda den nya operatorn. När vi skapar en instans av en klass med hjälp av ny operator får vi objektet som kan komma åt klassens egenskaper och metoder enligt nedan:

let student_details = new Students(15, "Harry John", 33);
student_details.getAge(); // 15
student_details.getName(); // Harry John

sammanställa TypeScript Klass till JavaScript

Du kan använda tsc-kommandot som visas nedan för att kompilera till Javascript.

Command: tsc  Students.ts

Utsignalen från Javascript kod vid kompilering är som visas nedan:

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 Javascript, konverteras klassen till en självanropad funktion.

Klass Arv

Klasser kan ärvas med hjälp av förlänga nyckelord i TypeScript.

Klassarvssyntax:

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

}

klass B kommer att kunna dela klass A metoder och egenskaper.

Här är ett fungerande exempel på en klass som använder arv

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

Du har två klasser, Person och Student. Studentklass utökar Person, och objektet som skapats på Student kan komma åt sina egna metoder och egenskaper såväl som klassen det har utökat.

Låt oss nu lägga till några fler ändringar i ovanstående klass.

Exempelvis:

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

Ändringarna som du har lagt till i jämförelse med föregående exempel är att det finns en konstruktor definierad i klassen Student. Konstruktören måste ta samma parametrar som basklassen och lägga till eventuella ytterligare parametrar.

In TypeScript du måste ringa super will alla params som baserna params i den. Detta måste vara det första som ska göras inuti konstruktören. Super kommer att köra konstruktören för den utökade klassen.

Åtkomstmodifierare i TypeScript

TypeScript stöder offentliga, privata och skyddade åtkomstmodifierare till dina metoder och egenskaper. Som standard, om åtkomstmodifierare inte ges anses metoden eller egenskapen vara offentlig, och de kommer att vara lättillgängliga från klassens objekt.

I händelse av privata åtkomstmodifierare är de inte tillgängliga för åtkomst från klassens objekt och endast avsedda att användas i klassen. De är inte tillgängliga för den ärvda klassen.

I händelse av skyddade åtkomstmodifierare är de avsedda att användas i klassen och den ärvda klassen och kommer inte att vara tillgängliga från klassens objekt.

Exempelvis:

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
  • Privat: egenskaper eller metoder kan inte nås av klassens objekt och även den härledda klassen, de är avsedda att användas internt i klassen.
  • Skyddade: egenskaper och metoder kan inte heller nås av det skapade objektet. De är tillgängliga inifrån klassen och tillgängliga för klassen som förlänger den.
  • Offentlig: egenskaper och metoder deklareras utan något nyckelord. De är lätta att nå med klassens objekt utifrån.

Gränssnitt i TypeScript

En av kärnfunktionerna i TypeScript är gränssnitt. Gränssnittet är en uppsättning av en definierad regel som måste implementeras av den enhet som använder den. Entiteten kan vara en klass, funktion eller variabel. Ett gränssnitt kan bestå av egenskaper och metoder. Du kan definiera egenskaper som valfria genom att använda "?" syntax för den egenskapen eller metoden. Gränssnittet lägger till en stark typkontroll för alla funktioner, variabler eller klasser som implementerar gränssnittet.

Syntax för ett gränssnitt i TypeScript

interface Dimension {
    width: string;
    height: string;
}

Du har definierat ett gränssnitt som heter Dimension som har egenskaper bredd och höjd, och båda har typ som en sträng.

Nu kan detta gränssnitt implementeras av en variabel, en funktion eller en klass. Här är ett exempel på variabel som implementerar gränssnittet Dimension.

Exempelvis:

interface Dimension {
    width: string;
    height: string;
}

let _imagedim: Dimension = {
    width: "100px",
    height: "200px"
};

Signaturen för gränssnittet Dimension har bredd och höjd, och båda är obligatoriska. Om någon av egenskaperna missas under implementering av gränssnittet, eller om typen ändras, kommer det att ge ett kompileringstidsfel när koden kompileras till javascript.

Ovanstående kod, när den kompileras till javascript, ser ut som följer:

var _imagedim = {
    width: "100px",
    height: "200px"
};

Låt oss nu se hur man använder ett gränssnitt med en funktion.

Använda gränssnitt på en funktion som returtyp

Exempelvis:

interface Dimension {
    width: string;
    height: string;
}

function getDimension() : Dimension {
    let width = "300px";
    let height = "250px";
    return {
        width: width,
        height: height
    }
}

I exemplet ovan är gränssnittet Dimension implementerat på funktionen getDimension() som returtyp. Returtypen för getDimension() måste matcha egenskaperna och typen som nämns för Interface Dimension.

Den kompilerade koden till Javascript kommer att vara enligt följande:

function getDimension() {
    var width = "300px";
    var height = "250px";
    return {
        width: width,
        height: height
    };
}

Under kompileringen, om returtypen inte matchar gränssnittet, kommer det att ge ett fel.

Gränssnitt som funktionsparameter

interface Dimension {
    width: string;
    height: string;
}

function getDimension(dim: Dimension) : string {
    let finaldim  = dim.width +"-"+ dim.height;
    return finaldim;
}

getDimension({width:"300px", height:"250px"}); // will get "300px-250px"

Så ovanstående exempel har du använt Interface Dimension som en parameter för funktionen getDimension(). När du anropar funktionen måste du se till att parametern som skickas till den matchar den definierade gränssnittsregeln.

Den kompilerade koden till Javascript kommer att vara enligt följande:

function getDimension(dim) {
    var finaldim = dim.width + "-" + dim.height;
    return finaldim;
}
getDimension({ width: "300px", height: "250px" });

Klassimplementerande gränssnitt

För att använda gränssnittet med en klass måste du använda nyckelordet redskap.

Syntax för klass som implementerar ett gränssnitt:

class NameofClass implements InterfaceName {
}

Följande exempel visar hur gränssnittet fungerar med klass.

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

I exemplet ovan har du definierat gränssnitt Dimension med egenskaper bredd och höjd både av typen sträng och en metod som heter getWidth() som har ett returvärde som en sträng.

Den kompilerade koden till Javascript kommer att vara enligt följande:

var Shapes = /** @class */ (function () {
    function Shapes(width, height) {
        this.width = width;
        this.height = height;
    }
    Shapes.prototype.getWidth = function () {
        return this.width;
    };
    return Shapes;
}());

Fungerar i TypeScript

Funktioner är en uppsättning instruktioner som utförs för att utföra en uppgift. I Javascript, är det mesta av koden skriven i form av funktioner och spelar en stor roll. I TypeScript, du har klass, gränssnitt, moduler, namnutrymmen tillgängliga, men ändå spelar funktioner en viktig roll. Skillnaden mellan funktionen i javascript och TypeScript funktion är returtypen som finns tillgänglig med TypeScript funktion.

JavaSkriptfunktion:

function add (a1, b1) { 
   return a1+b1;
}

TypeScript fungera:

function  add(a1 : number, b1: number) : number {
    return a1 + b1;
}

I ovanstående funktioner läggs namnet på funktionen till, parametrarna är a1och b1 båda har en typ som ett tal, och returtypen är också ett tal. Om du råkar skicka en sträng till funktionen kommer den att skapa ett kompileringsfel när den kompileras till JavaManus.

Ringa upp funktionen: lägg till

let  x = add(5, 10) ;  // will return 15
let  b = add(5); // will throw an error : error TS2554: Expected 2 arguments, but got 1.
let c = add(3,4,5); // will throw an error : error TS2554: Expected 2 arguments, but got 3.
let t = add("Harry", "John");// will throw an error :  error TS2345: Argument of type '"Harry"' is not assignable to parameter of type 'number'.

Paramerna a1 och b1 är obligatoriska parametrar och kommer att ge ett fel om det inte tas emot på det sättet. Param-typen och returtypen är också mycket viktig och kan inte ändras när den väl har definierats.

Valfria parametrar till en funktion

I javascript är alla parametrar till funktionerna valfria och betraktas som odefinierade om de inte godkänns. Men detsamma är inte fallet med TypeScript, när du väl har definierat parametrarna måste du också skicka dem, men om du vill behålla någon param valfri kan du göra det genom att använda? mot paramnamnet som visas nedan:

function getName(firstname: string, lastname?: string): string {
    return firstname + lastname;
}

let a = getName("John"); // will return Johnundefined.
let b = getName("John", "Harry"); // will return JohnHarry
let c = getName("John", "H", "Harry"); // error TS2554: Expected 1-2 arguments, but got 3.

Observera att de valfria parametrarna endast ska definieras i en funktion till sist, du kan inte ha den första paramen som valfri och den andra paramen som obligatorisk. När du anropar funktionen med en param kommer kompilatorn att skapa ett fel. Så det är nödvändigt att behålla de valfria parametrarna i slutet.

Tilldela standardvärden till parametrar

Du kan tilldela standardvärden till parametrar som visas nedan:

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

I likhet med valfria parametrar måste standardinitierade parametrar även här behållas i slutet i en funktion.

Vila parametrar

Du har sett hur TypeScript hanterar obligatoriska parametrar, valfria parametrar och standardvärdet initierade parametrar. Nu ska vi ta en titt på viloparametrar. Viloparametrar är en grupp valfria parametrar som definieras tillsammans, och de definieras med tre prickar (…) följt av namnet på param, som är en array.

Syntax för viloparametrar:

function testFunc(a: string, ...arr: string[]) :string {
    return a + arr.join("");
}

Som visas ovan definieras viloparametrarna med (…param-namn); resten param är en array med tre punkter som prefix. Arrayen kommer att skicka alla parametrar till sig. Du kan anropa funktionen, som visas i exemplet nedan:

Exempelvis:

let a = testFunc("Monday", "Tuesday", "Wednesday", "Thursday"); // will get output as MondayTuesdayWednesdayThursday

Pilfunktioner

En pilfunktion är en av de viktiga funktionerna som släpps i ES6, och den är tillgänglig i TypeScript för. Pilfunktionssyntaxen har en fet pil på grund av vilken funktionen kallas en pilfunktion.

Pilfunktion Syntax:

var nameoffunction = (params) => {				
 // code here			
}

Vad är användningen av pilfunktionen?

Låt oss ta en titt på exemplet för att förstå användningsfallet för pilfunktionen:

Exempelvis:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(function () {
            console.log(this.score);    // gives undefined.    
        }, 1000);
    }    
}

var a = new ScoreCard();
a.getScore();

Du har skapat en anonym funktion som har en egenskap detta. Score initialisera till 0 och en metod getScore som internt har en setTimeout, och på 1 sekund tröstar den detta.score. Det tröstade värdet ger undefined även om du har this.score definierad och initialiserad. Frågan här är med this nyckelord. Funktionen inuti setTimeout har sin egen detta, och den försöker referera poängen internt, och eftersom den inte är definierad ger den odefinierad.

Detsamma kan göras med hjälp av pilfunktionen som visas nedan:

var ScoreCard = function () {
    this.score = 0;

    this.getScore = function () {
        setTimeout(()=>{
            console.log(this.score);   // you get  0
        }, 1000);
    }    
}

var a = new ScoreCard();
a.getScore();

Du har ändrat funktionen i setTimeout till en pilfunktion som visas nedan:

setTimeout(()=>{
            console.log(this.score);   // you get  0
        }, 1000);

En pilfunktion har inte sin egen detta definieras och den delar sin förälder detta, så variabler som deklareras utanför är lättillgängliga med denna inuti en pilfunktion. De är användbara på grund av den kortare syntaxen såväl som för återuppringningar, händelsehanterare, interna timingfunktioner, etc.

TypeScript Enums

TypeScript Enum är ett objekt som har en samling relaterade värden lagrade tillsammans. Javascript stöder inte uppräkningar. De flesta av programmeringsspråk tycka om Java, C, C++ stöder TypeScript Enum och det finns även med TypeScript för. Enums definieras med nyckelordet enum.

Hur deklarerar man en Enum?

Syntax:

enum NameofEnum {
   value1,
   value2,
    ..
}

Exempel: Enum

enum Directions {
North,
South,
East,
West
}

I exemplet ovan har du definierat en uppräkning som heter Vägbeskrivningar. Värdet som anges är North, South, East, West. Värdena numreras från 0 för det första värdet i uppräkningen och ökar sedan med 1 för nästa värde.

Deklarera En Enum med ett numeriskt värde

Som standard, om en enum inte ges något värde, betraktar den det som ett tal som börjar från 0. Följande exempel visar en enum med ett numeriskt värde.

enum Directions {
North = 0,
South = 1, 
East =2,
West =3
}

Du kan också tilldela ett startvärde till enummet och nästa uppräkningsvärde kommer att få de ökade värdena. Till exempel:

enum Directions {
North = 5,
South, // will be 6
East, // 7
West // 8
}

Nu börjar uppräkningsvärdet North med 5, så syd får värdet som 6, öst = 7 och väst = 8.

Du kan också tilldela valfria värden istället för att ta standardvärdena. Till exempel:

enum Directions {
North = 5,
South = 4,
East = 6,
West = 8
}

Hur får man tillgång till en Enum?

Följande exempel visar hur du använder Enum i din kod:

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

Den kompilerade koden till javascript är följande:

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]);

Eftersom Javascript stöder inte enums, den konverterar enumen till en självanropad funktion som visas ovan.

Deklarera An Enum med ett strängvärde

Du kan tilldela strängvärden som du väljer, som visas i exemplet nedan:

Exempelvis:

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 North

Den kompilerade koden till javascript är följande:

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]);

Vad är modulerna i TypeScript?

Filerna skapade i TypeScript ha global åtkomst, vilket innebär att variabler som deklarerats i en fil lätt kan nås i en annan fil. Denna globala karaktär kan orsaka kodkonflikter och kan orsaka problem med körning under körning. Du har export- och importmodulfunktionalitet som kan användas för att undvika globala variabel-funktionskonflikter. Denna funktion är tillgänglig i JavaSkript med ES6-release och stöds även i TypeScript.

Varför behöver du moduler i TypeScript?

Följande exempel visar problemet utan moduler:

Exempel test1.ts

let age : number = 25;

Du har definierat en variabel ålder av typnummer i test1.ts.

Exempel test2.ts

I test2.ts-filen kan du enkelt komma åt variabeln ålder definieras i test1.ts och även ändra den enligt nedan:

age = 30; // changed from 25 to 30.
let _new_age = age;

Så ovanstående fall kan skapa många problem eftersom variablerna är globalt tillgängliga och kan modifieras.

Med Moduler, förblir den skrivna koden lokalitet för filen och kan inte nås utanför den. För att komma åt något från filen måste den exporteras med nyckelordet export. It används när du vill att variabeln, klassen, funktionen eller gränssnittet ska användas i en annan fil. Importera används när du vill komma åt den exporterade variabeln, klassen eller gränssnittet eller funktionen också. Om du gör så förblir koden intakt i filen, och även om du definierar samma variabelnamn, blandas de inte ihop och beter sig lokalt för filen där de deklareras.

Använda Export och Import

Det finns många sätt att exportera och importera. Så kommer att diskutera syntax här som används mest.

Syntaxen för import och export 1:

export  nameofthevariable or class name or interface name etc

//To import above variable or class name or interface you have to use import as shown below:
 

Import {nameof thevariable or class name or interfacename} from "file path here without.ts"

Här är ett fungerande exempel med export och import.

Exempelvis:

test1.ts

export let age: number = 25;

Export nyckelord används för att dela åldersvariabel i en annan fil.

test2.ts

import { age } from "./test1"
let new_age :number = age;

Importera nyckelord används för att komma åt ålder variabel, och du måste ange filplatsen som visas ovan.

Syntax för import och export 2:

Det finns ett annat sätt att exportera, och import och syntax för detsamma är som visas nedan:

export = classname;

import classname = require(“file path of modulename”)

När du använder exportera = för att exportera din modul måste importen använda require(“filsökväg till modulnamn”) för att importera den.

Här är ett fungerande exempel som visar fallet ovan:

Kund.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;

testCustomer.ts

import Customer = require("./Customer");

let a = new Customer("Harry", 30);
alert(a.getName());

Modullastare

Moduler kan inte fungera på egen hand, så du behöver modulladdare för att lokalisera importberoendena som du har sett i TypeScript exempel som visas ovan. Den tillgängliga modulladdaren är CommonJS för nodejs och Require.js för att köras i webbläsaren.

För att kompilera kod med CommonJS-modulen använd följande kommando:

tsc --module commonjs testCustomer.ts

För att kompilera kod med Requirejs-modulen använd följande kommando:

tsc --module amd testCustomer.ts

De beroende filerna kommer att konverteras till js-fil med ovanstående kommando.

Exempel testCustomer.ts till testCustomer.js med Requirejs

define(["require", "exports", "./Customer"], function (require, exports, Customer) {
    "use strict";
    exports.__esModule = true;
    var a = new Customer("Harry", 30);
    alert(a.getName());
});

Exempel Customer.ts till Customer.js med 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;
});

För att testa det med require.js måste du skapa en fil som heter main.js, som har referens till beroenden som visas.

Här är mappstrukturen:

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>

Modullastare

Namnutrymmen i TypeScript

Namnutrymme är i princip har en samling av klasser, gränssnitt, variabler, funktioner tillsammans i en fil.

Syntax för namnutrymme

namespace name{

export class {
}

export interface {
}

export const constname;

}

Den relaterade koden är tillgänglig under ett namnområde.

Namespace arbetsexempel: 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;
        }
    }
}

Namnet på namnområdet är Studentinställning, du har lagt till ett gränssnitt StudDetails , funktion addSpace och en klass som heter Student.

Åtkomst till namnutrymme

Följande är koden där du använder namnutrymmet Studentinställning.

testStudentSetup.ts

let a = new StudentSetup.Student({ name: "Harry", age: 20 });

console.log("The name is :" + StudentSetup.addSpace(a.getName()));

Klassen, gränssnittet, en funktion som är tillgänglig i ett namnområde måste refereras med namnet på namnutrymmesexemplet StudentSetup.addSpace för att komma åt funktionen, StudentSetup.Student för att komma åt klassen.

Du kan kompilera båda filerna till en js som visas nedan:

tsc --outFile namespace.js testnamespace.ts  testStudentSetup.ts

Kontrollera utdata i kommandotolken med kommandot nedan:

node namespace.js

Det kommer att visa utdata som:

The name is: H a r r y

Omgivningsdeklarationer i TypeScript

TypeScript låter dig använda tredjeparts javascript-filer med omgivande deklaration. Fördelen med den här funktionen är att du inte behöver skriva om och ändå använda alla funktioner i biblioteket i TypeScript.

Ambient syntax

För att deklarera omgivande modul:

declare module moduleName {
   //code here
}

Omgivningsfilen måste sparas som:

filename.d.ts

För att använda filen filnamn.d.ts i din .ts måste du hänvisa till det som:

/// <reference path="filename.d.ts"/>

Omgivningstypdeklarationen i TypeScript kommer att ha en referens till tredje parts bibliotek och kommer att återdeklarera de funktioner som krävs med sin egen typ. Tänk till exempel att du har ett litet javascript-bibliotek, som visas nedan:

Tredjeparts JavaSkriptfil: testString.js

Exempel: 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();
    }
};

Du har ett objekt som heter StringChecks som har funktioner som isString, convertToUpperCase, convertToLowerCase och converToStringBold.

Skapande av Ambient Module i TypeScript

Nu kommer att skapa en omgivande modul som kommer att ha hänvisning till ovanstående js-funktioner och även lägga till typkontroll enligt våra krav.

Filnamn: 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;

Du måste definiera ett modulnamn som TestString och ha exporterat gränssnitt StringsFunc.

isString(str: sträng): boolesk

=> Detta tar param som en sträng och returtypen kommer att vara boolesk. När du använder i din .ts-fil om du råkar skicka paramet som ett nummer eller något annat än sträng kommer det att ge dig ett kompileringsfel.

convertToUpperCase(str:sträng): sträng

=> Detta tar argument som sträng och returnerar en sträng. Detsamma gäller convertToLowerCase(str: sträng)
: sträng; och convertToStringBold(str: sträng): sträng
;

Eftersom du i javascript-filen har objektnamnet som StringChecks, måste vi slutligen referera till detsamma i .d.ts-filen som görs som:

declare var StringChecks: TestString.StringsFunc;

Använder Ambient-modulen i TypeScript

Här är test.ts-filen där den omgivande filen tstring.d.ts kommer att användas

Exempel: test.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);

Sammanställa TypeScript tsc test.ts till 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);

Nu kan du använda test.js i html-filen och även biblioteksfilen testString.js

<html>			
<head>			
    <title>Test TypeScript Ambient</title>			
    <script src="testStrings.js"></script>			
    <script src="test.js"></script>			
</head>			
<body>			
</body>			
</html>

Detta är utgången som ses i konsolen:

true			
HELLO WORLD			
hello			
<b>Hello World</b>

TypeScript Historik

Låt se viktiga landmärken från historien om TypeScript:

  • Efter två år av intern utveckling kl Microsoft. TypeScript 0.9, släppt 2013
  • Ytterligare stöd för generika TypeScript 1.0 släpptes vid Build 2014
  • I juli 2014, en ny TypeScript kompilatorn kom som är fem gånger snabbare än den tidigare versionen.
  • I juli 2015, stöd för ES6-moduler, namnutrymmes nyckelord, för, för support, dekoratörer.
  • I november 2016, en tillagd funktion som nyckel- och uppslagstyper för mappade typer och vila.
  • Den 27 mars 2018, villkorade typer, den förbättrade nyckeln med korsningstyper stöds i TypeScript.

Varför användning TypeScript?

Här finns viktiga fördelar/fördelar med att använda TypeScript

  • Stort och komplext projekt i JavaSkript är svåra att koda och underhålla.
  • TypeScript hjälper mycket i kodorganisationen och blir ändå av med de flesta felen under kompileringen.
  • TypeScript stöder JS-bibliotek och API-dokumentation
  • Det är valfritt maskinskrivet skriptspråk
  • TypeScript Koden kan konverteras till vanlig JavaSkriptkod
  • Bättre kodstrukturering och objektorienterade programmeringstekniker
  • Ger bättre stöd för verktyg för utvecklingstid
  • Det kan utöka språket bortom standarddekoratörerna, asynkronisera/vänta

Vem använder TypeScript?

Här är några vanligaste tillämpningar av TypeScript:

  • Det kantiga laget använder TypeScript.
  • NodeJS och NPM installation
  • TypeScript Installation
  • Sammanställa TypeScript kod till Javascript
  • Kör kod med Nodejs
  • Utförande Javascript i webbläsaren
  • Sammanställa TypeScript kod till Javascript använder EcmaScript-versionen
  • Du kan enkelt kompilera kod inskriven TypeScript till JavaSkript med NodeJS.
  • Så att jobba med TypeScript du måste först ladda ner och installera NodeJS.

Sammanfattning

  • TypeScript är en superset av JavaManus. TypeScript är rent objektorienterat programmeringsspråk som stödjer klasser, gränssnitt m.m.
  • TypeScript stöder alla Ecmascript-funktioner som släppts, och utvecklare kan använda samma när de kodar.
  • Variabler används för att lagra värden, och värdet kan vara en sträng, tal, boolesk eller ett uttryck.
  • In TypeScript, typen till en variabel definieras endast i början och genom exekveringen måste den bibehålla samma typ. Alla ändringar av den kommer att leda till ett kompileringsfel under kompileringen till javascript.
  • En Array in TypeScript är en datatyp där du kan lagra flera värden.
  • Klass är en ny funktion som lagts till från ES6 och framåt, så tidigare JavaSkript klasstypsfunktionaliteten testades med en funktion med prototypfunktionalitet för att återanvända kod.
  • TypeScript stöder offentliga, privata och skyddade åtkomstmodifierare till dina metoder och egenskaper.
  • En av kärnfunktionerna i TypeScript är gränssnitt. Gränssnittet är en uppsättning av en definierad regel som måste implementeras av den enhet som använder den.
  • Funktioner är en uppsättning instruktioner som utförs för att utföra en uppgift.
  • TypeScript Enum är ett objekt som har en samling relaterade värden lagrade tillsammans.