TypeScript - TypeScript
| Paradigme | Multi-paradigme : funktionel , generisk , imperativ , objektorienteret |
|---|---|
| Designet af | Microsoft |
| Udvikler | Microsoft |
| Første gang dukkede op | 1. oktober 2012 |
| Stabil udgivelse | |
| Udgivelsesversion | |
| Skrive disciplin | And , gradvis , strukturel |
| Licens | Apache -licens 2.0 |
| Filnavn udvidelser | .ts, .tsx |
| Internet side | www |
| Påvirket af | |
| C# , Java , JavaScript | |
| Påvirket | |
| AtScript , AssemblyScript | |
TypeScript er et programmeringssprog udviklet og vedligeholdt af Microsoft . Det er et strengt syntaktisk supersæt af JavaScript og tilføjer valgfri statisk tastatur til sproget. TypeScript er designet til udvikling af store applikationer og transkompilerer til JavaScript. Da TypeScript er et supersæt af JavaScript, er eksisterende JavaScript -programmer også gyldige TypeScript -programmer.
TypeScript kan bruges til at udvikle JavaScript-applikationer til udførelse af både klientsiden og serversiden (som med Node.js eller Deno ). Der er flere muligheder for transcompilation. Enten kan standard TypeScript Checker bruges, eller også kan Babel -kompilatoren påberåbes for at konvertere TypeScript til JavaScript.
TypeScript understøtter definitionsfiler, der kan indeholde typeoplysninger fra eksisterende JavaScript -biblioteker, ligesom C ++ - header -filer kan beskrive strukturen af eksisterende objektfiler . Dette gør det muligt for andre programmer at bruge de værdier, der er defineret i filerne, som om de var statisk typede TypeScript -enheder. Der er tredjeparts header-filer til populære biblioteker såsom jQuery , MongoDB og D3.js . TypeScript -headere til Node.js grundmoduler er også tilgængelige, hvilket muliggør udvikling af Node.js -programmer inden for TypeScript.
TypeScript -kompilatoren er selv skrevet i TypeScript og kompileret til JavaScript. Det er licenseret under Apache License 2.0 . TypeScript er inkluderet som et førsteklasses programmeringssprog i Microsoft Visual Studio 2013 Update 2 og senere sammen med C# og andre Microsoft-sprog. En officiel udvidelse giver Visual Studio 2012 også mulighed for at understøtte TypeScript. Anders Hejlsberg , hovedarkitekt for C# og skaber af Delphi og Turbo Pascal , har arbejdet med udviklingen af TypeScript.
Historie
TypeScript blev først offentliggjort i oktober 2012 (ved version 0.8) efter to års intern udvikling hos Microsoft. Kort efter meddelelsen roste Miguel de Icaza selve sproget, men kritiserede manglen på moden IDE -understøttelse bortset fra Microsoft Visual Studio , som ikke var tilgængelig på Linux og OS X på det tidspunkt. Fra april 2021 er der support i andre IDE'er og tekstredigerere, herunder Emacs , Vim , Webstorm , Atom og Microsofts egen Visual Studio Code .
TypeScript 0.9, udgivet i 2013, tilføjede understøttelse af generika. TypeScript 1.0 blev frigivet på Microsofts Build- udviklerkonference i 2014. Visual Studio 2013 Update 2 giver indbygget understøttelse af TypeScript.
I juli 2014 annoncerede udviklingsteamet en ny TypeScript -kompilator, der hævdede 5 × præstationsgevinster. Samtidig blev kildekoden, der oprindeligt blev hostet på CodePlex , flyttet til GitHub .
Den 22. september 2016 blev TypeScript 2.0 frigivet; det introducerede flere funktioner, herunder programmørernes mulighed for valgfrit at forhindre variabler i at blive tildelt nullværdier, undertiden omtalt som milliardfejlen .
TypeScript 3.0 blev udgivet den 30. juli 2018 og bragte mange tilføjelser til sprog som f.eks. Tuples i hvileparametre og spredningsudtryk, hvileparametre med dobbelttyper, generiske hvileparametre og så videre.
TypeScript 4.0 blev udgivet den 20. august 2020. Selvom 4.0 ikke introducerede nogen brydende ændringer, tilføjede det sprogfunktioner såsom Custom JSX Factories og Variadic Tuple Typer.
Design
TypeScript stammer fra manglerne i JavaScript til udvikling af store applikationer både hos Microsoft og blandt deres eksterne kunder. Udfordringer ved håndtering af kompleks JavaScript -kode førte til efterspørgsel efter tilpasset værktøj til at lette udviklingen af komponenter i sproget.
TypeScript-udviklere søgte en løsning, der ikke ville bryde kompatibiliteten med standarden og dens platformsoversigt. Ved at vide, at det nuværende ECMAScript-standardforslag lovede fremtidig støtte til klassebaseret programmering , var TypeScript baseret på det forslag. Det førte til en JavaScript -kompilator med et sæt syntaktiske sprogudvidelser, et supersæt baseret på forslaget, der omdanner udvidelserne til almindeligt JavaScript. I denne forstand var TypeScript en forhåndsvisning af, hvad man kan forvente af ECMAScript 2015. Et unikt aspekt, der ikke er i forslaget, men tilføjet til TypeScript, er valgfri statisk typning, der muliggør statisk sproganalyse, hvilket letter værktøjs- og IDE -understøttelse.
ECMAScript 2015 support
TypeScript tilføjer understøttelse af funktioner som klasser, moduler og en pilfunktionssyntaks som defineret i ECMAScript 2015 -standarden.
Funktioner
TypeScript er en sprogudvidelse, der tilføjer funktioner til ECMAScript 6. Yderligere funktioner omfatter:
- Type anmærkninger og compile-tid typekontrol
- Type inferens
- Skriv sletning
- Grænseflader
- Opregnede typer
- Generiske
- Navneområder
- Tuples
- Asynkroniser/afventer
Følgende funktioner backporteres fra ECMAScript 2015:
- Klasser
- Moduler
- Forkortet "pil" syntaks for anonyme funktioner
- Valgfrie parametre og standardparametre
Syntaktisk ligner TypeScript meget JScript .NET , en anden Microsoft-implementering af ECMA-262-sprogstandarden, der tilføjede understøttelse af statisk typning og klassiske objektorienterede sprogfunktioner såsom klasser, arv, grænseflader og navnerum.
Kompatibilitet med JavaScript
TypeScript er et strengt supersæt af ECMAScript 2015, som i sig selv er et supersæt af ECMAScript 5, der almindeligvis kaldes JavaScript. Som sådan er et JavaScript -program også et gyldigt TypeScript -program, og et TypeScript -program kan problemfrit forbruge JavaScript. Som standard målretter kompilatoren ECMAScript 5, den nuværende gældende standard, men er også i stand til at generere konstruktioner, der bruges i ECMAScript 3 eller 2015.
Med TypeScript er det muligt at bruge eksisterende JavaScript-kode, inkorporere populære JavaScript-biblioteker og kalde TypeScript-genereret kode fra andet JavaScript. Typedeklarationer for disse biblioteker leveres med kildekoden.
Skriv kommentarer
TypeScript giver statisk indtastning gennem typeanmærkninger for at muliggøre typekontrol på kompileringstidspunktet . Dette er valgfrit og kan ignoreres for at bruge den almindelige dynamiske indtastning af JavaScript.
function add(left: number, right: number): number {
return left + right;
}
Bemærkningerne for de primitive typer er number, booleanog string. Maskinskrift understøtter også datatyper med følgende anmærkninger Array, Enums, void.
Nyindførte datatyper er: Tuple, Union, neverog any. En matrix med foruddefinerede datatyper ved hvert indeks er Tupletype. En variabel, der indeholder mere end én datatype, er Uniontype. Når du er sikker på, at der aldrig vil ske noget, bruger du nevertype. Svagt- eller dynamisk typede strukturer er af anytypen.
Type -annoteringer kan eksporteres til en separat deklarationsfil for at gøre typeoplysninger tilgængelige for TypeScript -scripts ved hjælp af typer, der allerede er kompileret til JavaScript. Kommentarer kan erklæres for et eksisterende JavaScript -bibliotek, som det er gjort for Node.js og jQuery .
TypeScript -kompilatoren anvender typeinferens til at udlede typer, når typer ikke er angivet. For eksempel vil addmetoden i koden ovenfor blive udledt som at returnere en, numberselvom der ikke er blevet givet en annotering af returtypen. Dette er baseret på de statiske typer af leftog rightværen numbers, og kompilatorens viden om, at resultatet af tilføjelse af to numbersaltid er a number. Imidlertid giver kompilatoren eksplicit erklæring om returtypen for at kontrollere korrektheden.
Hvis ingen type kan udledes på grund af manglende erklæringer, er den som standard den dynamiske anytype. En værdi af anytypen understøtter de samme operationer som en værdi i JavaScript, og der udføres minimal statisk typekontrol for operationer på anyværdier.
Deklarationsfiler
Når et TypeScript -script kompileres, er der mulighed for at generere en deklarationsfil (med udvidelsen .d.ts), der fungerer som en grænseflade til komponenterne i det kompilerede JavaScript. I processen fjerner kompilatoren alle funktions- og metodelegemer og bevarer kun signaturerne af de typer, der eksporteres. Den resulterende deklarationsfil kan derefter bruges til at beskrive de eksporterede virtuelle TypeScript-typer i et JavaScript-bibliotek eller modul, når en tredjepartsudvikler bruger den fra TypeScript.
Begrebet deklarationsfiler er analogt med begrebet header -fil, der findes i C/C ++ .
declare namespace arithmetics {
add(left: number, right: number): number;
subtract(left: number, right: number): number;
multiply(left: number, right: number): number;
divide(left: number, right: number): number;
}
Typedeklarationsfiler kan skrives i hånden til eksisterende JavaScript -biblioteker, som det er gjort for jQuery og Node.js.
Store samlinger af deklarationsfiler til populære JavaScript -biblioteker hostes på GitHub i DefinitelyTyped .
Klasser
TypeScript understøtter ECMAScript 2015 -klasser, der integrerer den valgfri type annotationsunderstøttelse.
class Person {
private name: string;
private age: number;
private salary: number;
constructor(name: string, age: number, salary: number) {
this.name = name;
this.age = age;
this.salary = salary;
}
toString(): string {
return `${this.name} (${this.age}) (${this.salary})`; // As of version 1.4
}
}
Generiske
TypeScript understøtter generisk programmering . Det følgende er et eksempel på identitetsfunktionen .
function id<T>(x: T): T {
return x;
}
Moduler og navnerum
TypeScript skelner mellem moduler og navnerum. Begge funktioner i TypeScript understøtter indkapsling af klasser, grænseflader, funktioner og variabler i containere. Navnearealer (tidligere interne moduler) anvender øjeblikkeligt påkrævet funktionsudtryk for JavaScript til at indkapsle kode, mens moduler (tidligere eksterne moduler) udnytter JavaScript-biblioteksmønstre til at gøre det ( AMD eller CommonJS ).
Udviklingsværktøjer
Kompilator
TypeScript -kompilatoren, navngivet tsc, er skrevet i TypeScript . Som et resultat kan det kompileres til almindeligt JavaScript og kan derefter eksekveres i enhver JavaScript -motor (f.eks. En browser). Compiler -pakken leveres sammen med en script -vært, der kan eksekvere compileren. Den er også tilgængelig som en Node.js -pakke, der bruger Node.js som vært.
Den aktuelle version af kompilatoren understøtter ECMAScript 5 som standard. Det er tilladt at målrette ECMAScript 2015 for at gøre brug af sprogfunktioner, der er eksklusive for den version (f.eks. Generatorer). Klasser, på trods af at de er en del af ECMAScript 2015 -standarden, er tilgængelige i begge tilstande.
IDE og editor support
- Microsoft leverer et plug-in til Visual Studio 2012 og WebMatrix , fuld integreret support i Visual Studio 2013 , Visual Studio 2015 og grundlæggende tekstredigeringssupport til Emacs og Vim .
- Visual Studio Code er en (for det meste) open source, cross-platform kildekode-editor udviklet af Microsoft baseret på Electron . Det understøtter TypeScript ud over flere andre sprog og tilbyder funktioner som fejlfinding og intelligent kodeudfyldelse .
- alm.tools er en open source cloud -IDE til TypeScript bygget med TypeScript, ReactJS og TypeStyle.
- JetBrains understøtter TypeScript med kodeudfyldning , refaktorering og fejlfinding i sine IDE'er, der er bygget på IntelliJ-platformen, såsom PhpStorm 6, WebStorm 6 og IntelliJ IDEA , samt deres Visual Studio-tilføjelse og -udvidelse, ReSharper 8.1.
- Atom har et TypeScript -plugin fra Basarat med understøttelse af kodeudfyldelse , navigation, formatering og hurtig kompilering.
- Online Cloud9 IDE og Codenvy understøtter TypeScript.
- Et plugin er tilgængeligt til NetBeans IDE .
- Et plugin er tilgængeligt til Eclipse IDE (version Kepler)
- TypEcs er tilgængelig for Eclipse IDE .
- Cross Platform Cloud IDE Codeanywhere understøtter TypeScript.
- Webclipse Et Eclipse -plugin designet til at udvikle TypeScript og Angular 2 .
- Angular IDE En selvstændig IDE tilgængelig via npm til at udvikle TypeScript- og Angular 2 -applikationer med integreret terminalunderstøttelse.
- Tide - TypeScript interaktivt udviklingsmiljø for Emacs .
Integration med build -automatiseringsværktøjer
Ved hjælp af plug-ins kan TypeScript integreres med build-automatiseringsværktøjer , herunder Grunt (grunt-ts), Apache Maven (TypeScript Maven Plugin), Gulp (gulp-typescript) og Gradle (TypeScript Gradle Plugin).
Fnugværktøjer
TSLint scanner TypeScript -kode for at overholde et sæt standarder og retningslinjer. ESLint , en standard JavaScript linter, gav også en vis understøttelse af TypeScript via community -plugins. ESLints manglende evne til at udnytte TypeScripts sprogtjenester forhindrede imidlertid visse former for semantisk fnug og programdækkende analyse. I begyndelsen af 2019 annoncerede TSLint -teamet linterens forringelse til fordel for typescript-eslinten fælles indsats fra TSLint-, ESLint- og TypeScript -holdene for at konsolidere fnug under ESLint -paraplyen for forbedret ydeevne, fællesskabsenhed og udviklertilgængelighed. For at bruge TypeScript med ESLint skal du tilføje @typescript-eslint/eslint-pluginog @typescript-eslint/parser.
Udgivelseshistorik
| Versionsnummer | Udgivelses dato | Betydelige ændringer |
|---|---|---|
| 0,8 | 1. oktober 2012 | |
| 0,9 | 18. juni 2013 | |
| 1.0 | 12. april 2014 | |
| 1.1 | 6. oktober 2014 | præstationsforbedringer |
| 1.3 | 12. november 2014 |
protected modifikator, dobbelttyper
|
| 1.4 | 20. januar 2015 |
union typer , letog consterklæringer, skabelon strygere, type vagter, type aliaser
|
| 1.5 | 20. juli 2015 | ES6 -moduler, namespacesøgeord, for..ofsupport, dekoratører
|
| 1.6 | 16. september 2015 | JSX-understøttelse, krydsstyper , lokale typedeklarationer, abstrakte klasser og metoder, brugerdefinerede typebeskyttelsesfunktioner |
| 1.7 | 30. november 2015 |
asyncog awaitstøtte,
|
| 1.8 | 22. februar 2016 | begrænsninger generik, fejl i kontrolflowanalyse, bogstavelige typer, allowJs
|
| 2.0 | 22. september 2016 | null- og udefinerede typer, kontrolflowbaseret typeanalyse, diskriminerede fagforeningstyper, nevertype, readonlysøgeord, type thisfor funktioner
|
| 2.1 | 8. november 2016 |
keyof og opslagstyper, kortlagte typer, genstandsspredning og hvile,
|
| 2.2 | 22. februar 2017 | mix-in klasser, objecttype,
|
| 2.3 | 27. april 2017 |
async iteration, generiske parameterstandarder, streng mulighed
|
| 2.4 | 27. juni 2017 | dynamiske importudtryk, strengnumre, forbedret slutning til generika, streng kontravariation for tilbagekaldsparametre |
| 2.5 | 31. august 2017 | valgfrie fangstklausulvariabler |
| 2.6 | 31. oktober 2017 | strenge funktionstyper |
| 2.7 | 31. januar 2018 | konstant navngivne egenskaber, faste længder |
| 2.8 | 27. marts 2018 | betingede typer, forbedret keyofmed krydsetyper
|
| 2,9 | 14. maj 2018 | understøttelse af symboler og numeriske bogstaver i keyof og kortlagte objekttyper |
| 3.0 | 30. juli 2018 | projektreferencer, udtræk og spredning af parameterlister med tupler |
| 3.1 | 27. september 2018 | mappable tuple and array types |
| 3.2 | 30. november 2018 | strengere kontrol af bind, ring og ansøg |
| 3.3 | 31. januar 2019 | lempede regler om metoder til fagforeningstyper, inkrementelle bygninger til sammensatte projekter |
| 3.4 | 29. marts 2019 | hurtigere inkrementelle builds, type inferens fra generiske funktioner, readonly modifier for arrays, const-påstande, typekontrol global this
|
| 3.5 | 29. maj 2019 | hurtigere inkrementelle bygninger, undlad hjælper type, forbedret overskydende ejendomskontrol i fagforeningstyper, smartere fagforeningstjek |
| 3.6 | 28. august 2019 | Strammere generatorer, mere præcis arrayspredning, bedre unicode -understøttelse af identifikatorer |
| 3.7 | 5. november 2019 | Valgfri kæde, Nullish Coalescing |
| 3.8 | 20. februar 2020 | Kun import og eksport af type, ECMAScript private felter, topniveau venter |
| 3.9 | 12. maj 2020 | Forbedringer i slutning, hastighedsforbedringer |
| 4.0 | 20. august 2020 | Variadic Tuple Typer, Mærket Tuple Elements |
| 4.1 | 19. november 2020 | Skabelon bogstavelige typer, videregivelse af nøgler i tilknyttede typer, rekursive betingede typer |
| 4.2 | 25. februar 2021 | Smartere type alias bevarelse, førende/mellemliggende elementer i dobbelttyper, strengere kontroller for inoperatøren, abstractkonstruer signaturer
|
| 4.3 | 26. maj 2021 | Separate skrivetyper på egenskaber overrideog --noImplicitOverrideflag, forbedringer af skabelonstrengtype
|
| 4.4 | 26. august 2021 | Kontrolflowanalyse af aliasforhold og diskriminanter, symbol- og skabelonstrengmønsterindekssignaturer |
Se også
Referencer
Citater
Kilder
- "Webclipse: Eclipse Plugin" Genuitec. Hentet 9. november 2016.
- "Angular IDE by Webclipse: Standalone IDE" Genuitec. Hentet 9. november 2016.