Czy powinienem używać maszynopisu? czy mogę po prostu użyć ES6? [Zamknięte]

286

Moja codzienna praca to programista klienta korzystający z AngularJS. Oceniamy, czy chcemy korzystać z TypeScript. Przeprowadziłem badania dotyczące maszynopisu i prawie każdy pakiet JavaScript, którego potrzebuję, musi mieć pliki typu definicji. Przekonałem się, że nie jest to zbyt wygodne, szczególnie jeśli chciałbym spróbować czegoś nowego i nie mają na to definicji. To naprawdę frustrujące. (Nawet obecna definicja jQuery sprawia mi pewne problemy, jeśli chcę używać maszynopisu 1.5 w wersji beta). Zacząłem patrzeć na ES6 i wygląda podobnie do TypeScript. Czy zamiast tego powinienem używać ES6? Słyszałem też, że Angular 2 będzie miał pełną obsługę TypeScript, czy to jeden z powodów, dla których powinienem się nim posługiwać?

cjskywalker
źródło
11
Nie potrzebujesz pliku definicji za każdym razem, aby uzyskać coś nowego. Jeśli chcesz używać biblioteki bez typu, możesz pisać, declare var MyNewLibraryName: any;a następnie używać jej tak, jak chcesz, bez narzekań kompilatora.
David Sherret,
2
Głosując za zamknięciem tego pytania, sugerowałbym więcej pytań za / przeciw związanych z każdym podejściem, niż pytanie, który jest najlepszy, w ten sposób prosisz o informacje, a nie o opinie.
Brocco,
aktualizacje maszynopisu nowa funkcja wersji javascript przed wszystkimi głównymi przeglądarkami, moją opcją jest użycie maszynopisu i kompilacja do wersji javascript w oparciu o przeglądarki docelowe. (oczywiście nawet łatwo jest transponować javascript z jednej wersji do drugiej)
bhv
Jeśli nie przejmujesz się poprawnym kodowaniem kodu i chcesz, aby Immutable.js był naprawdę trudny w pracy, i uwielbiasz pisać szablon, i myślisz, że DRY jest przereklamowany i wolisz powtarzać siebie, a ty lubisz pisać definicje typów dla kodów innych osób, lubisz zarządzać typami, które zmieniają się pod tobą, i lubisz przełączać się między dwoma różnymi edytorami tekstu, ponieważ nic nie działa poprawnie, a następnie wybierz Typescript. Ale jeśli jesteś zdrowy, wybierz ES6 / 7 i Babel.
gigantyczny

Odpowiedzi:

114

Używam Typescript w moim bieżącym projekcie kątowym od około półtora roku i chociaż od czasu do czasu pojawia się kilka problemów z definicjami, projekt DefinitelyTyped wykonuje niesamowitą pracę nadążaniem za najnowszymi wersjami najpopularniejszych bibliotek.

Powiedziawszy, że istnieje wyraźna krzywa uczenia się przy przechodzeniu z waniliowego JavaScript na TS i powinieneś wziąć pod uwagę zdolność ciebie i swojego zespołu do dokonania tego przejścia. Ponadto, jeśli zamierzasz używać kątowej 1.x większość przykładów, które znajdziesz w Internecie, będzie wymagała przetłumaczenia ich z JS na TS i ogólnie nie ma zbyt wielu zasobów na temat używania TS i kątowej 1.x teraz .

Jeśli planujesz używać kątowej 2, istnieje wiele przykładów używania TS i myślę, że zespół będzie nadal dostarczał większość dokumentacji w TS, ale na pewno nie musisz używać TS, aby używać kątowej 2.

ES6 ma kilka fajnych funkcji i osobiście planuję się z nim lepiej zapoznać, ale w tym momencie nie uważałbym go za język gotowy do produkcji. Głównie z powodu braku wsparcia ze strony obecnych przeglądarek. Oczywiście możesz napisać swój kod w ES6 i użyć transpilatora, aby dostać go do ES5, co wydaje się być obecnie popularną rzeczą.

Ogólnie rzecz biorąc, myślę, że odpowiedź sprowadziłaby się do tego, co Ty i Twój zespół czujecie komfortowo. Osobiście uważam, że zarówno TS, jak i ES6 będą miały dobre wsparcie i długą przyszłość, wolę jednak TS, ponieważ masz tendencję do szybszego uzyskiwania funkcji językowych, a teraz wsparcie narzędzi (moim zdaniem) jest nieco lepsze.

Kent Cooper
źródło
40
ES6 nie obsługuje przeglądarki? Czy jesteś politykiem ze stwardnienia rozsianego? Zarówno maszynopis, jak i ES6 wymagają transpilatora. Oznacza, że ​​nie używasz TS ani ES6 w sieci, a raczej używasz czegoś takiego jak Babel. TS w Angular 2 został dodany tylko dla politycznego remisu między Google i MS
STEEL
40
@STEEL Nie, nie jestem politykiem ze stwardnienia rozsianego, tylko odpowiadasz na odpowiedź, którą zostawiłem ponad rok temu, kiedy wsparcie ES6 było bardzo ograniczone. I możesz myśleć, że decyzja TS i Angular 2 była polityczna, ale to nie zmienia mojego zdania, że ​​została napisana dla tego języka, a zespół Angular2 zachęca do jej użycia.
Kent Cooper
18
Dzieje się tak od 2 lat temu, ale czas pokazał, jak ostatecznie zwycięży ten standard. Obecnie większość przeglądarek obsługuje ES6. Klasy, funkcje strzałek itp. W końcu dojdziemy do punktu, w którym przeglądarki będą natywnie obsługiwać wystarczająco przyzwoitą wersję javascript, aby uczynić transpilery niepotrzebnymi. Maszynopis zawsze będzie wymagał transpilatora. Dlaczego to jest ważne? ponieważ naszym obowiązkiem jako programistów stron jest popychanie sieci do przodu, a to poprzez wspieranie standardów
monzonj
3
Bummer ES6 nie obsługuje faktycznego bezpieczeństwa typu „czas kompilacji”. W ES6 jest wiele świetnych rzeczy, ale fakt, że nie mogę powiedzieć „ten argument jest ciągiem (lub instancją klasy X), do cholery” i być w stanie zweryfikować to jako część procesu kompilacji, jest nadal zły dla duże programy (zarówno przód, jak i tył).
Brad Peabody
Możesz użyć narzędzia takiego jak Flow Type, aby dodać obsługę typów do ES6, jeśli naprawdę chcesz. Dopóki ES6 nie stanie się wszechobecny we wszystkich przeglądarkach, twój zestaw narzędzi będzie składał się z Flow-> ES6-> Babel, który jest bardzo pośredni, ale spełnia swoje zadanie i myślę, że obecnie jest to bardzo popularny łańcuch.
Prahlad Yeri
660

Drzewo decyzyjne między ES5, ES6 a TypeScript

Czy masz coś przeciwko etapowi kompilacji?

  • Tak - użyj ES5
  • Nie - kontynuuj

Czy chcesz używać typów?

  • Tak - użyj TypeScript
  • Nie - użyj ES6

Więcej szczegółów

ES5 to JavaScript, który znasz i którego używasz dzisiaj w przeglądarce, jest tym, czym jest i nie wymaga kroku kompilacji, aby przekształcić go w coś, co będzie działać w dzisiejszych przeglądarkach

ES6 (zwany także ES2015 ) to kolejna wersja JavaScript, ale nie działa w dzisiejszych przeglądarkach. Istnieje wiele transpilatorów, które eksportują ES5 do działania w przeglądarkach. Jest to wciąż język dynamiczny (czytaj: bez typu).

TypeScript zapewnia opcjonalny system pisania, jednocześnie pobierając funkcje z przyszłych wersji JavaScript (ES6 i ES7).

Uwaga: wiele dostępnych transpilatorów (tj. Babel, TypeScript) pozwoli ci na korzystanie z funkcji przyszłych wersji JavaScript i eksportowanie kodu, który nadal będzie działał w dzisiejszych przeglądarkach.

Brocco
źródło
5
To nie takie proste. Istnieje wiele innych czynników.
RaoulRubin
16
@RaoulRubin To prawda, istnieje wiele innych czynników, ale w przypadku zamkniętego pytania na ten temat przynajmniej stanowi on podstawę do podjęcia decyzji
Brocco
1
PS - ES6 + FlowType = Love :)
Red2678
3
@RavinderPayal ma interesujące pytanie, Brocco. Z punktu widzenia rynku, jaka jest wartość TS w porównaniu z es5 lub es6 i tym podobne rzeczy?
J.Wells
3
Ok, więc ten post ma kilka lat /. Przejdźmy do dzisiaj, 28 września 2017 r. Czy większość przeglądarek obsługuje ES6?
Dewey Banks,