TypeScript Vejledning: Hvad er, Grænseflade, Enum, Array

⚡ Smart opsummering

TypeScript er et stærkt typet supersæt af JavaScript der kompilerer til almindeligt JavaScripterer og tilføjer klasser, grænseflader, enums, moduler og navnerum. Denne artikel dækker installation, variabler, typer, arrays, klasser, adgangsmodifikatorer, grænseflader, funktioner, enums, moduler og ambient-deklarationer.

  • 🧬 Sprogforhold: Hver gyldig JavaScriptprogrammet er gyldigt TypeScript, og compileren udsender almindelig JavaScript til enhver målversion.
  • 🔒 Statisk Typing: En variabel beholder den type, der er angivet ved deklarationen, så en uoverensstemmelse rapporteres ved kompileringstid i stedet for under kørsel.
  • 🧱 Objektorientering: Klasser, arv og offentlige, private og beskyttede modifikatorer bringer velkendt struktur til browserkode.
  • 📐 interfaces: En grænseflade definerer en ulempetract af egenskaber og metoder, som en variabel, funktion eller klasse skal opfylde.
  • 🔢 Optællinger: Navngivne konstantsæt kompilerer til selvkaldte funktioner, da JavaScriptet har ingen native enum-type.
  • 📦 moduler: Eksport og import holder deklarationer lokale i en fil og forhindrer globale navnekollisioner.
  • 🔌 Omgivelseserklæringer: En .d.ts-fil beskriver en tredjepartsfil. JavaScriptbibliotek, så typekontrol gælder uden at omskrive det.

TypeScript tutorial

Hvad er TypeScript?

TypeScript er et supersæt af JavaManuskript. TypeScript er et objektorienteret programmeringssprog, der understøtter klasser, grænseflader og mere. Det er et open source-sprog udviklet af Microsoft som statisk kompilerer koden til JavaScript. Det kan nemt køre i en browser eller i Nodejs.

Alle de seneste funktioner frigivet til ECMAScript understøttes i TypeScript, og derudover TypeScript har sine egne objektorienterede funktioner såsom grænseflader, ambient-deklarationer og klassearv, som hjælper med udviklingping en stor applikation, der ellers ville være vanskelig at bygge ind JavaScript.

Forholdet er ensrettet. Hver gyldighed JavaScriptfilen er allerede gyldig TypeScript, men det omvendte er ikke tilfældet, fordi typeannotationer kun findes i TypeScript og slettes under kompilering.

Hvorfor bruge TypeScript?

Her er de vigtige fordele ved at bruge TypeScript:

  • Store og komplekse projekter i JavaScript er vanskeligt at kode og vedligeholde.
  • TypeScript hjælper meget med kodeorganisering og fjerner de fleste fejl under kompilering i stedet for under kørsel.
  • TypeScript understøtter JS-biblioteker og API-dokumentation.
  • Det er et valgfrit typebestemt scriptsprog, så typer kan implementeres gradvist.
  • TypeScript kode kan konverteres til almindelig JavaScriptkode til ethvert browsermål.
  • Det giver bedre kodestrukturering og objektorienterede programmeringsteknikker.
  • Det giver bedre understøttelse af udviklingsværktøjer, herunder autofuldførelse og sikker refactoring.
  • Det kan udvide sproget ud over standarden med funktioner som dekoratører.

Den største praktiske gevinst er editor-understøttelse. Fordi compileren kender formen på hver værdi, kan en editor omdøbe en egenskab på tværs af et helt projekt og rapportere hvert sted, der ikke længere matcher.

TypeScript Historie

Lad os se på de vigtige milepæle fra historien om TypeScript:

  • Efter to års intern udvikling kl Microsoft, TypeScript 0.9 blev udgivet i 2013.
  • TypeScript 1.0, med yderligere understøttelse af generiske lægemidler, blev udgivet ved Build 2014.
  • I juli 2014 kom en ny TypeScript compileren ankom, som var fem gange hurtigere end den tidligere version.
  • I juli 2015 blev der tilføjet understøttelse af ES6-moduler, navneområdets nøgleord, for…of og decorators.
  • I november 2016 blev kortlagte typer, nøgle- og opslagstyper samt objektrest og -spredning tilføjet.
  • Den 27. marts 2018 blev betingede typer og forbedret keyof med krydsningstyper tilføjet.
  • TypeScript 5.0, udgivet i marts 2023, moderniserede designere og reducerede pakkestørrelsen.
  • TypeScript 6.0 ankom i marts 2026 som den endelige udgivelse bygget på JavaScriptkodebase.
  • TypeScript 7.0 flytter compileren til en native Go-implementering, hvilket Microsoft rapporteres som cirka ti gange hurtigere end 6.0.

Hvem bruger TypeScript?

TypeScript er ikke længere et nichevalg. Det understøtter flere af de mest anvendte frontend- og backend-værktøjer, og listen nedenfor viser, hvor en nybegynder er mest tilbøjelig til at støde på det.

  • Vinkel: Angular-frameworket er skrevet i TypeScript, og det forventes også, at der skrives applikationskode i den.
  • React- og Vue-projekter: Begge økosystemer sender officielle TypeScript skabeloner, og de fleste moderne startere aktiverer det som standard.
  • Node.js backends: Serverframeworks som NestJS er bygget op omkring TypeScript klasser og dekoratører.
  • Redigeringsværktøjer: Visual Studio Code er i sig selv en stor TypeScript kodebase, hvilket er grunden til dens sprogunderstøttelse er så komplet.
  • Store virksomheds front-ends: Teams, der arbejder med mange bidragydere, anvender det for at opdage integrationsfejl før implementering.

Sådan downloades og installeres TypeScript

Her er den trinvise proces til download og installation TypeScript:

Trin 1) Download og installer Nodejs

Gå til Nodejs' officielle hjemmeside, https://nodejs.org/en/download/, og download og installer Nodejs til dit operativsystem. Detaljerede instruktioner er tilgængelige i vejledningen på hvordan man downloader og installerer Node.js.

Trin 2) Tjek Nodejs og npm version

For at kontrollere om Nodejs og npm er installeret, skal du kontrollere versionen i din kommandoprompt.

D:\typeproject>node --version
v22.14.0

D:\typeproject>npm --version
10.9.2

Enhver nuværende Node LTS-udgivelse fungerer. TypeScript kræver i sig selv kun en understøttet Node-version for at køre compileren.

Trin 3) TypeScript Installation

Opret din projektmappe typeproject\ og kør npm init, som vist i kommandoen nedenfor:

npm init

Trin 4) Start installationen

Dette opretter package.json, som gemmer afhængighederne for vores projekt.

Når det er gjort, skal du installere TypeScript som følger:

npm -g install typescript

Ovenstående kommando tager sig af installationen TypeScript. Tilføjelse af "-g" til npm install vil installere TypeScript globalt. Fordelen ved at bruge -g er, at du vil kunne bruge TypeScript TSC kommando fra enhver mappe, da den er installeret globalt. Hvis du ikke vil installere TypeScript globalt, brug kommandoen nedenfor:

npm install --save-dev typescript

Opret en src\-mappe i din projektmappe, og inde i src\ skal du oprette TypeScript fil test.ts og skriv din kode.

Eksempel : test.ts

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

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

Kompiler TypeScript kode til Javascript

For at kompilere ovenstående kode skal du bruge følgende kommando.

If TypeScript er installeret globalt, brug kommandoen nedenfor:

tsc test.ts

If TypeScript er installeret lokalt i dit projekt, skal du bruge stien til TypeScript fra node_modules, som vist, eller kør det gennem npx:

node_modules\typescript\bin\tsc test.ts

OR

npx tsc test.ts

Ovenstående kommando opretter en test.js-fil, hvor koden kompileres til JavaManuskript.

Eksempel : test.js

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

Udfør Javascript ved hjælp af Nodejs

Nu vil vi udføre test.js i Nodejs som følger:

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

Den værdi, der sendes til console.log, vises, når test.js kører.

Udfør JavaScript i browser

Eksempel:

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

Udfør Javascript ved hjælp af Nodejs

Kompiler TypeScript kode til Javascript ved hjælp af EcmaScript-version

TypeScript understøtter alle de udgivede ECMAScript-funktioner, og udviklere kan bruge dem under kodning. Men ikke alle nye funktioner understøttes af ældre browsere, så du skal muligvis kompilere til en ældre version af ECMAScript. TypeScript tilbyder compiler-muligheder, der gør præcis det.

Eksempel : test.ts

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

addnumbers(10, 20);

For at kompilere til ES-versionen efter eget valg, kan du bruge indstillingen target eller t i din kommando som følger:

tsc --target ES6  test.ts

OR

tsc -t ES6 test.ts

Som standard er målet ES3 for den klassiske compiler. Hvis du vil ændre det, kan du bruge kommandoen ovenfor.

I øjeblikket bruger vi ES6 som mål:

tsc --target ES6  test.ts

test.ts til test.js

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

addnumbers(10, 20);

Koden forbliver som den er, fordi den pilefunktion, du har brugt, er en ES6-funktion og forbliver uændret, når den kompileres til ES6.

Som standard er målet ES3, så uden et mål får du test.js som:

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

Så her er den tykke pil ændret til en normal anonym funktion.

💡 Tip: I stedet for at sende indstillinger på kommandolinjen hver gang, så kør tsc --init for at generere en tsconfig.json-fil. Compileren læser derefter target-, outDir- og strict-indstillinger fra den fil for hele projektet.

Variabler i TypeScript

Variabler bruges til at gemme værdier, og værdien kan være en streng, tal, boolesk eller et udtryk. Når det kommer til variabler i TypeScript, de ligner JavaScriptSå lad os lære at deklarere og tildele en værdi til variabler i TypeScript.

Variabler kan ikke bruges i kode uden at være defineret. For at deklarere en variabel kan du bruge

var søgeord,

lad søgeord

const søgeord

Arbejde med variabler i TypeScript svarer til JavaScript og brugere, der er bekendt med JavaScriptet vil finde det meget nemt. I moderne kode, lad og const foretrækkes frem for var, fordi deres blokomfang forhindrer en hel klasse af fejl.

Erklæring af variable ved hjælp af var

Syntaks:

var firstname = "Roy";

Lad os tage et kig på et par stykker TypeScript eksempler til at forstå, hvordan nøgleordet var fungerer, og også omfanget af variabler, der erklæres ved hjælp af var nøgleord.

Eksempel 1:

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

Eksempel 2:

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

Eksempel 3:

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

Erklære variabler ved hjælp af let

TypeScript syntaks for let er som angivet nedenfor:

Syntaks:

let name = "Roy";

Arbejdet med lad variablen er næsten den samme som var, men med én vigtig forskel, som eksemplet nedenfor viser.

Eksempel:

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

test(); // throws an error: Cannot find name 't'

Ovenstående TypeScript eksemplet kaster en fejl, men den samme kode ville have virket med var nøgleord. Variabler deklareret ved hjælp af lad er kun tilgængelige inden for den blok, hvor de er deklareret. I dette eksempel findes t kun inden for if-blokken, ikke i hele funktionen.

Det samme gælder inden for enhver funktion, for loop, while loop eller switch-blok. En let-variabel er kun tilgængelig inden for den blok, og reference til den uden for blokken giver en fejl. Dette er den primære forskel mellem var og let.

Erklæring af variable ved hjælp af const

Const betyder konstante variabler. De ligner let-variabler, med den forskel, at når en værdi først er tildelt, kan den ikke ændres. En const-deklaration skal derfor initialiseres på samme linje.

Syntaks:

const name = "Roy";

Eksempel:

const age = "25";
age = "30"; // error: Cannot assign to 'age' because it is a constant

const total; // error: 'const' declarations must be initialized

Så brug const, når du ved, at den tildelte værdi ikke vil blive gentildelt. Bemærk, at const forhindrer gentildeling af bindingen, ikke ændring af et objekt, den peger på.

Taster ind TypeScript

TypeScript er et stærkt typesprog, hvorimod JavaScriptet er ikke. En variabel, hvis værdi er defineret som en streng, kan uden problemer ændres til et tal i JavaScript. Det samme tolereres ikke i TypeScript. I TypeScript, er typen af ​​en variabel defineret i starten, og under hele udførelsen skal den beholde denne type. Enhver ændring fører til en kompileringsfejl under kompileringen til JavaManuskript.

Følgende er de grundlæggende typer:

Type accepterer Eksempel på erklæring
nummer Heltal, flydende tal og brøker lad et: tal = 10;
streng Kun tekstværdier lad s: streng = “hej”;
boolean kun sandt eller falsk lad b: boolsk = sand;
enhver Enhver værdi, ingen kontrol anvendt lad x: vilkårlig = 123;
ugyldig Fravær af en returværdi funktion f(): void {}

nummer

Tager kun heltal, flydende tal, brøker og lignende numeriske værdier.

Syntaks:

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

Her er nogle vigtige metoder, der kan bruges på taltyper:

toFixed() – den konverterer tallet til en streng og beholder de decimaler, der er givet til metoden.

toString () – denne metode konverterer tallet til en streng.

Værdi af() – denne metode vil give tallets primitive værdi tilbage.

til præcision() – denne metode vil formatere tallet til en specificeret længde.

Eksempel: med alle talmetoder

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

String

Streng: kun strengværdier.

Syntaks:

let str :string = "hello world";

Her er nogle vigtige metoder, der kan bruges på strengtyper:

  • delt() – denne metode vil opdele strengen i et array.
  • tegnAt() – denne metode vil give tegnet ved det givne indeks.
  • indeks af() – denne metode vil angive positionen for den første forekomst af den givne værdi.
  • erstatte() – denne metode tager 2 strenge. Den søger efter den første værdi i strengen, og hvis den er til stede, erstatter den den med den anden, hvilket giver en ny streng tilbage.
  • trimme() – denne metode fjerner mellemrum fra begge sider af strengen.
  • substr() – denne metode vil give en del af strengen, afhængigt af startpositionen og den givne længde.
  • understreng() – denne metode vil give en del af strengen, afhængigt af start- og slutpositionen. Tegnet ved slutpositionen er udeladt.
  • til Store bogstaver() – konverterer strengen til store bogstaver.
  • til LowerCase() – vil konvertere strengen til små bogstaver.

Eksempel:

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"

Boolesk

En boolsk værdi accepterer kun de logiske værdier sand og falsk. I modsætning til almindelig værdi. JavaScript, tallene 0 og 1 accepteres ikke, fordi de er af typen nummer.

Syntaks:

let status :boolean = true;
let isDone :boolean = false;

let bflag :boolean = 1;
// error: Type 'number' is not assignable to type 'boolean'

Enhver

Syntaks:

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

Variabler deklareret ved hjælp af enhver Typen kan indeholde en streng, et tal, et array, en boolsk værdi eller et void-værdi. TypeScript vil ikke give nogen kompileringstidsfejl, hvilket svarer til variabler i JavaScript. Brug kun typen any, når du er usikker på den type værdi, der vil blive knyttet til den pågældende variabel, fordi den deaktiverer enhver kontrol af den pågældende værdi.

Void

Void-typen bruges mest som returtype for en funktion, der ikke returnerer noget.

Syntaks:

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

TypeScript Array

An Array in TypeScript er en datatype, hvor du kan gemme flere værdier. Lad os lære, hvordan man deklarerer og tildeler værdier til array-operationer i TypeScript.

Siden TypeScript er et stærkt typebestemt sprog, skal du angive datatypen for værdierne i et array. Ellers vil det blive behandlet som af typen any.

Erklær og initialiser et array

Syntaks:

let nameofthearray : Array<typehere>

Eksempel

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

Forskellige måder at få adgang til elementer fra et array

For at hente elementerne fra et array starter værdierne fra indeks 0 og op til arrayets længde minus én.

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

Du kan også hente elementerne fra et array ved hjælp af en TypeScript forum loop, som vist nedenfor.

Ved brug af TypeScript til løkke

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

⚠️ Advarsel: Løkkebetingelsen skal være i < years.length. Skrivning i <= years.length kører én ekstra iteration og udskriver undefined, fordi det sidste gyldige indeks altid er længden minus én.

Brug af 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

Brug af for-of-løkke

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

Output:

2016
2017
2018
2019

Brug af forEach-løkken

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-objekter har mange egenskaber og metoder, der hjælper udviklere med at håndtere arrays nemt og effektivt. Du kan få værdien af ​​en egenskab ved at angive arrayname.property, og outputtet af en metode ved at angive arrayname.method().

Medlem Formål Returpolitik
længde Antal elementer i arrayet nummer
baglæns() Reverserækkefølgen af ​​varerne på plads Det samme array
sortere() Sorterer varerne på plads Det samme array
pop () Fjerner det sidste element Det fjernede element
flytte() Fjerner det første element Det fjernede element
skubbe() Tilføjer en værdi som det sidste element Den nye længde
sammensætte() Sammenføjer to arrays til ét Et nyt array

Eksempel på længdeegenskab

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

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

Eksempel på omvendt metode

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

Eksempel på sorteringsmetode

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

Eksempel på pop-metoden

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

Eksempel på skiftemetode

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

Eksempel på push-metode

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

Eksempel på konkat metode

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]

Klasse i TypeScript

TypeScript er et supersæt af JavaScript, så hvad som helst er muligt i JavaScript er også muligt i TypeScriptKlasse er en funktion tilføjet fra ES6 og fremefter. Tidligere i JavaScript-, klasselignende funktionalitet blev opnået ved hjælp af en funktion med prototypemetoder til at genbruge kode. Ved hjælp af klasse kan din kode komme tæt på sprog som f.eks. Java, C# og Python, hvor kode nemt kan genbruges.

Definer en klasse i TypeScript

Her er den grundlæggende klassesyntaks i TypeScript:

class nameofclass {
     //define your properties here

    constructor() {
     // initialize your properties here
    }

   //define methods for class
}

Eksempel: Et fungerende eksempel 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 ovenstående eksempel har du en klasse kaldet Students. Den har egenskaberne alder, navn og roll_no.

Konstruktør i en TypeScript Klasse

Klassen Students, der er defineret ovenfor, har en konstruktør som vist nedenfor:

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

Konstruktørmetoden har parametrene alder, navn og roll_no. Konstruktøren tager sig af initialiseringen af ​​egenskaberne, når klassen instantieres. Egenskaberne tilgås ved hjælp af denne nøgleord, for eksempel this.age for at få adgang til alder og this.roll_no for at få adgang til roll_no. Du kan også have en standardkonstruktør, som vist nedenfor:

constructor () {}

Metoder inde i en TypeScript Klasse

I klassen Students er der defineret metoder, for eksempel getRollNo(), getName() og getAge(), som returnerer værdierne for egenskaberne roll_no, name og age.

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

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

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

Oprettelse af en instans af en klasse i TypeScript

In TypeScript, for at oprette en instans af en klasse bruger du new-operatoren. Når du opretter en instans med new, får du et objekt, der kan tilgå klassens egenskaber og metoder, som vist nedenfor:

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

Kompilering af en TypeScript Klasse til JavaScript

Du kan bruge tsc-kommandoen som vist nedenfor til at kompilere til JavaManuskript.

Command: tsc  Students.ts

Output fra JavaScriptkoden ved kompilering er vist nedenfor:

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 JavaScriptet, klassen konverteres til en selvkaldt funktion.

Klasse Arv

Klasser kan nedarves ved hjælp af udvider søgeord i TypeScript.

Klasse arvesyntaks:

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

}

klasse B vil kunne dele klasse A metoder og egenskaber.

Her er et fungerende eksempel på en klasse, der bruger 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 to klasser, Person og Student. Student udvider Person, og objektet oprettet fra Student kan tilgå sine egne metoder og egenskaber såvel som dem for den klasse, det udvider.

Lad os nu tilføje nogle ændringer til ovenstående klasse.

Eksempel:

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

Ændringen i forhold til det foregående eksempel er en konstruktør defineret i klassen Student. Konstruktøren tager de samme parametre som basisklassen plus eventuelle yderligere parametre.

In TypeScript Du skal kalde super med alle basisklasseparametrene. Dette skal være den første sætning i konstruktøren, fordi super udfører konstruktøren for den udvidede klasse. Enhver egenskab, der er deklareret af den afledte klasse, såsom tmarks, skal derefter tildeles eksplicit, ellers ville getMarks returnere udefineret.

Få adgang til modifikatorer i TypeScript

TypeScript understøtter adgangsmodifikatorerne public, private og protected på dine metoder og egenskaber. Som standard, hvis der ikke er angivet nogen adgangsmodifikator, betragtes metoden eller egenskaben som public og er let tilgængelig fra klassens objekt.

I tilfælde af private adgangsmodifikatorer er medlemmer ikke tilgængelige fra klassens objekt og er kun beregnet til at blive brugt inde i klassen. De er ikke tilgængelige for en nedarvet klasse.

I tilfælde af beskyttede adgangsmodifikatorer er medlemmer beregnet til at blive brugt i klassen og den nedarvede klasse, og er ikke tilgængelige fra klassens objekt.

Eksempel:

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
ændring Samme klasse Afledt klasse Klassens objekt
offentlige Ja Ja Ja
beskyttet Ja Ja Ingen
private Ja Ingen Ingen

Interface i TypeScript

En af kerneegenskaberne ved TypeScript er grænseflader. En grænseflade er et sæt regler, der skal implementeres af den enhed, der bruger den. Enheden kan være en klasse, funktion eller variabel. En grænseflade kan bestå af egenskaber og metoder. Du kan markere en egenskab eller metode som valgfri ved hjælp af "?"-syntaksen. Grænsefladen tilføjer en stærk typekontrol for enhver funktion, variabel eller klasse, der implementerer den.

Syntaks for en grænseflade i TypeScript

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

Du har defineret en grænseflade med navnet Dimension, som har egenskaberne bredde og højde, begge af typen streng.

Nu kan denne grænseflade implementeres af en variabel, en funktion eller en klasse. Her er et eksempel på en variabel, der implementerer grænsefladen Dimension.

Eksempel:

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

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

Grænsefladen Dimensions signatur har bredde og højde, og begge er obligatoriske. Hvis en egenskab mangler, eller en type ændres, vil det give en kompileringsfejl under kompilering af koden til JavaManuskript.

Ovenstående kode, når den kompileres til JavaScriptet ser således ud:

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

Lad os nu se, hvordan man bruger en grænseflade med en funktion.

Brug af en grænseflade på en funktion som en returtype

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

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

I ovenstående eksempel bruges grænsefladen Dimension som returtype for funktionen getDimension(). Returværdien skal matche de egenskaber og typer, der er deklareret i grænsefladen.

Den kompilerede JavaScriptkoden vil være som følger:

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

Hvis returtypen under kompilering ikke matcher grænsefladen, vil der udløses en fejl.

Grænseflade 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"}); // "300px-250px"

I eksemplet ovenfor har du brugt grænsefladen Dimension som en parameter til funktionen getDimension(). Når du kalder funktionen, skal den parameter, der sendes til den, matche de regler, der er defineret af grænsefladen.

Den kompilerede JavaScriptkoden vil være som følger:

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

Klasse implementerer en grænseflade

For at bruge en grænseflade med en klasse, skal du bruge nøgleordet redskaber.

Syntaks for en klasse, der implementerer en grænseflade:

class NameofClass implements InterfaceName {
}

Følgende eksempel viser en grænseflade, der arbejder med en klasse.

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 ovenstående eksempel har du defineret grænsefladen Dimension med egenskaberne width og height, begge af typen string, og en metode kaldet getWidth(), som returnerer en string.

Den kompilerede JavaScriptkoden vil være som følger:

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

Fungerer i TypeScript

Funktioner er sæt af instruktioner, der udføres for at udføre en opgave. JavaI et script er det meste af koden skrevet i form af funktioner, og de spiller en vigtig rolle. TypeScript Du har klasser, grænseflader, moduler og navnerum tilgængelige, men funktioner spiller stadig en vigtig rolle. Forskellen mellem en funktion i JavaManuskript og TypeScript er parameter- og returtyperne tilgængelige med en TypeScript funktion.

JavaScript funktion:

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

TypeScript fungere:

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

I ovenstående funktion er funktionens navn add, parametrene er a1 og b1, begge af typen tal, og returtypen er også et tal. Hvis du sender en streng til funktionen, vil den give en kompileringsfejl under kompilering til JavaManuskript.

Foretager et kald til funktionen: 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'

Parametrene a1 og b1 er obligatoriske og vil forårsage en fejl, hvis de ikke angives. Parametertyperne og returtypen er lige vigtige og kan ikke ændres, når de først er defineret.

Valgfri parametre til en funktion

In JavaScript, alle parametre til funktioner er valgfrie og betragtes som udefinerede, hvis de ikke sendes. Det samme gælder ikke i TypeScriptNår du har defineret parametrene, skal du angive dem. Hvis du ønsker, at en parameter skal være valgfri, skal du tilføje et spørgsmålstegn efter parameternavnet, som vist nedenfor:

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

Bemærk venligst, at valgfrie parametre skal defineres sidst. Du kan ikke have den første parameter valgfri og den anden obligatorisk, da compileren ikke ville vide, hvilken værdi der blev angivet.

Tildel standardværdier til parametre

Du kan tildele standardværdier til parametre som vist nedenfor:

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

Ligesom valgfrie parametre skal standardinitialiserede parametre også gemmes i slutningen af ​​parameterlisten.

Hvileparametre

Du har set hvordan TypeScript håndterer obligatoriske parametre, valgfrie parametre og standardværdiparametre. Nu vil vi se på restparametre. Restparametre er en gruppe af valgfrie parametre, der er defineret sammen ved hjælp af tre prikker (…) efterfulgt af navnet på parameteren, som er et array.

Syntaks for hvileparametre:

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

Som vist ovenfor er rest-parameteren et array med tre prikker foran. Arrayet vil indeholde alle de resterende argumenter, der sendes til funktionen.

Eksempel:

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

Pilfunktioner

En pilefunktion er en af ​​de vigtige funktioner frigivet i ES6, og den er tilgængelig i TypeScript også. Syntaksen har en tyk pil i sig, hvilket er derfra navnet kommer.

Pilefunktion Syntaks:

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

Hvad er brugen af ​​en pilefunktion?

Lad os se på et eksempel for at forstå brugen af ​​en pilefunktion.

Eksempel:

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 oprettet en funktion med en egenskabsscore initialiseret til 0, og en metode getScore, der internt bruger setTimeout og efter et sekund logger this.score. Den loggede værdi er udefineret, selvom this.score er defineret og initialiseret. Problemet ligger i denne nøgleord. Funktionen i setTimeout har sit eget `thin`, og da scoren ikke er defineret på den, er resultatet udefineret.

Det samme kan håndteres ved hjælp af en pilefunktion, som vist nedenfor:

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

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

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

En pilefunktion har ikke sin egen denne, og deler i stedet den fra dens overordnede scope, så variabler, der er deklareret udenfor, er tilgængelige med denne inde i en pilefunktion. De er nyttige på grund af den kortere syntaks såvel som til callbacks, eventhandlere og timingfunktioner.

TypeScript Enums

A TypeScript enum er et objekt, der indeholder en samling af relaterede værdier gemt sammen. JavaScriptet understøtter ikke enums native. De fleste programmeringssprog som f.eks. Java, C og C++ supportopgørelser, og TypeScript gør dem også tilgængelige. Enums defineres ved hjælp af enum-nøgleordet.

Hvordan erklærer man en Enum?

Syntaks:

enum NameofEnum {
   value1,
   value2,
    ..
}

Eksempel: Enum

enum Directions {
    North,
    South,
    East,
    West
}

I ovenstående eksempel har du defineret en enum kaldet Retninger med værdierne Nord, Syd, Øst og Vest. Værdierne er nummereret fra 0 for den første post og øges med 1 for hver efterfølgende post.

Deklarer en enum med en numerisk værdi

Som standard, hvis et enum-medlem ikke får en værdi, tager det et tal startende fra 0. Følgende eksempel viser en enum med eksplicitte numeriske værdier.

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

Du kan også tildele en startværdi, og følgende medlemmer modtager forøgede værdier. For eksempel:

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

Nu starter nord ved 5, så syd er 6, øst er 7, og vest er 8.

Du kan også tildele værdier efter eget valg i stedet for standardværdierne. For eksempel:

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

Hvordan får man adgang til en Enum?

Følgende eksempel viser, hvordan du bruger en enum i din kode:

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 kompilerede JavaScriptet er som følger:

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

Siden JavaScriptet understøtter ikke enums. Compileren konverterer enum'en til en selvkaldt funktion, som vist ovenfor. Den dobbelte tildeling er det, der skaber den omvendte afbildning.ping fra nummer tilbage til navn.

Deklarer en enum med en strengværdi

Du kan tildele strengværdier efter eget valg, som vist i eksemplet nedenfor.

Eksempel:

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

Den kompilerede JavaScriptet er som følger:

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

⚠️ Advarsel: String-enums har ingen omvendt kortlægningpingSammenlign de to kompilerede output ovenfor: den numeriske enum gemmer begge retninger, mens strengenum kun gemmer navn til værdi. Derfor Directions[0] returnerer udefineret for en streng-enum.

Hvad er modulerne i TypeScript?

Filer oprettet i TypeScript har global adgang, hvilket betyder, at variabler, der er deklareret i én fil, kan tilgås i en anden fil. Denne globale natur kan forårsage kodekonflikter og runtime-problemer. Eksport- og importmodulfunktionalitet kan bruges til at undgå globale variabel- og funktionskonflikter. Denne funktion kom i JavaScriptet med ES6-udgivelsen og understøttes også i TypeScript.

Hvorfor har du brug for moduler i TypeScript?

Følgende eksempel viser problemet uden moduler.

Eksempel test1.ts

let age : number = 25;

Du har defineret en variabel alder af typenummer i test1.ts.

Eksempel test2.ts

I test2.ts kan du tilgå variablen alder defineret i test1.ts og også ændre den, som vist nedenfor:

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

Dette kan skabe en masse problemer, da variablerne er globalt tilgængelige og kan ændres hvor som helst.

Med moduler, forbliver den skrevne kode lokal for filen og kan ikke tilgås uden for den. For at dele noget fra en fil skal den eksporteres ved hjælp af export-nøgleordet. eksport bruges når du ønsker at en variabel, klasse, funktion eller grænseflade skal bruges i en anden fil. Importere bruges, når du vil have adgang til et eksporteret element. Dette holder koden intakt i filen, og selvom du definerer de samme variabelnavne, blandes de ikke sammen.

Brug af eksport og import

Der er mange måder at eksportere og importere på. Vi vil diskutere den syntaks, der er mest almindeligt anvendt.

Syntaksen for import og eksport 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"

Her er et fungerende eksempel ved hjælp af eksport og import.

test1.ts

export let age: number = 25;

Nøgleordet `export` bruges til at dele aldersvariablen med en anden fil.

test2.ts

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

import-nøgleordet bruges til at få adgang til alder variabel, og du skal angive filplaceringen som vist ovenfor.

Syntaks for import og eksport 2:

Der er en anden måde at eksportere og importere på, og syntaksen er som vist nedenfor:

export = classname;

import classname = require("file path of modulename")

Når du bruger eksport = For at eksportere dit modul skal importen bruge require("filsti til modulnavn").

Her er et fungerende eksempel, der viser den sag.

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

testKunde.ts

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

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

Modul Loader

Moduler kan ikke fungere alene, så du har brug for en modulindlæser til at finde importafhængighederne, som vist i TypeScript eksemplerne ovenfor. De tilgængelige modulindlæsere er CommonJS til Nodejs og Require.js til kørsel i browseren.

For at kompilere kode ved hjælp af CommonJS-modulformatet skal du bruge følgende kommando:

tsc --module commonjs testCustomer.ts

For at kompilere kode ved hjælp af Requirejs-modulformatet skal du bruge følgende kommando:

tsc --module amd testCustomer.ts

De afhængige filer konverteres til js-filer med kommandoen ovenfor.

Eksempel testCustomer.ts til testCustomer.js ved hjælp af Requirejs

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

Eksempel på Customer.ts til Customer.js ved hjælp af 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;
});

For at teste det ved hjælp af require.js, skal du oprette en fil kaldet main.js, som refererer til afhængighederne som vist.

Her er mappestrukturen:

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>

Modul Loader

Navneområder i TypeScript

Et navnerum indeholder en samling af klasser, grænseflader, variabler og funktioner samlet i én fil.

Syntaks for navneområde

namespace name{

export class {
}

export interface {
}

export const constname;

}

Den relaterede kode er tilgængelig under ét navnerum.

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

Navnet på navneområdet er Studentopsætning, og du har tilføjet en grænseflade StudDetails, en funktion addSpace og en klasse kaldet Student.

Adgang til et navnerum

Følgende er koden, hvor du bruger navnerummet Studentopsætning.

testStudentSetup.ts

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

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

Klassen, grænsefladen eller funktionen, der er tilgængelig i et navnerum, skal refereres til ved hjælp af navnerumsnavnet, for eksempel StudentSetup.addSpace for at få adgang til funktionen og StudentSetup.Student for at få adgang til klassen.

Du kan kompilere begge filer til én js-fil som vist nedenfor:

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

Tjek outputtet i kommandoprompten ved hjælp af kommandoen nedenfor:

node namespace.js

Output:

The name is :H a r r y

Omgivende erklæringer i TypeScript

TypeScript giver dig mulighed for at bruge tredjeparts JavaScriptfiler, der bruger ambient-deklarationer. Fordelen ved denne funktion er, at du ikke behøver at omskrive biblioteket, og alligevel kan du bruge alle dets funktioner med typekontrol. TypeScript.

Ambient syntaks

Sådan deklarerer du et ambient-modul:

declare module moduleName {
   //code here
}

Ambient-filen skal gemmes som:

filename.d.ts

For at bruge filen filnavn.d.ts I din .ts-fil skal du referere til den som:

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

Omgivelsestypedeklarationen i TypeScript refererer til tredjepartsbiblioteket og gendeklarerer de nødvendige funktioner med deres egne typer. Overvej f.eks. den lille JavaScriptbibliotek vist nedenfor.

Third Party JavaScriptfil: 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 et objekt kaldet StringChecks, som har funktionerne isString, convertToUpperCase, convertToLowerCase og convertToStringBold.

Oprettelse af et Ambience-modul i TypeScript

Nu vil vi oprette et ambient-modul, der refererer til JavaScriptet fungerer ovenfor og tilføjer typekontroller efter behov.

Filnavn: 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 definerer et modul med navnet TestString og eksporterer grænsefladen StringsFunc. Hver signatur angiver, hvad funktionen accepterer og returnerer:

  • isString(str: streng): boolesk – tager en streng og returnerer en boolsk værdi. Hvis et tal eller en anden type overføres, produceres der en kompileringsfejl.
  • konverterTilStoreBogstaver(str: streng): streng – tager en streng og returnerer en streng.
  • konverterTilSmåBogstaver(str: streng): streng – tager en streng og returnerer en streng.
  • convertToStringBold(str: streng): streng – tager en streng og returnerer en streng.

Eftersom JavaScriptfilen eksponerer objektnavnet StringChecks, vi refererer endelig til det samme navn i .d.ts-filen:

declare var StringChecks: TestString.StringsFunc;

Brug af et Ambient-modul i TypeScript

Her er test.ts-filen, som bruger ambient-filen 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);

Kompilér med tsc test.ts for at producere 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 bruge test.js i en HTML-fil sammen med biblioteksfilen testString.js.

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

Output:

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

💡 Tip: For populære biblioteker behøver du sjældent selv at skrive en .d.ts-fil. Installer i stedet de typer, der vedligeholdes af fællesskabet, for eksempel. npm install --save-dev @types/lodash, og compileren henter dem automatisk.

For at fortsætte, sammenlign de to sprog direkte i TypeScript vs JavaScript, genbesøg JavaScript array-metoder for de utypede ækvivalenter, der anvendes her, og undersøg sløjfer ind JavaScript og interne og eksterne JavaScript for de browsergrundlæggende elementer, som det kompilerede output er baseret på.

Ofte Stillede Spørgsmål

Nej. En browser udfører JavaKun script, så .ts-filen skal først kompileres med tsc eller en bundler. Typeannotationer slettes i dette trin og har ingen runtime-omkostninger.

Ja. Aktivér allowJs i tsconfig.json og omdøb filerne én ad gangen. Fordi hver JavaScriptfilen er allerede gyldig TypeScript, projektet fortsætter med at kompilere under hele migreringen.

En grænseflade kan genåbnes og udvides, og det er det sædvanlige valg for objektformer. Et typealias dækker også foreninger, tupler og primitiver, som grænseflader ikke kan udtrykke.

Brug moduler med eksport og import. Navnerum er ældre end ES-moduler og er fortsat nyttige primært til deklarationsfiler og ældre scriptbaserede kodebaser.

Ja, målbart. Compileren afviser hallucinerede egenskaber og forkerte argumenttyper med det samme, så et genereret kodestykke enten typekontrollerer eller rapporterer præcist, hvor det er forkert.

Editor-integrationer indfører de omkringliggende typer og .d.ts-filer i modelkonteksten. Mere omfattende annotationer producerer derfor mere præcise fuldførelser end løst typet kode.

Opsummer dette indlæg med: