Czym są typy w maszynopisie

Jestem nowy w Angular2 i jak na razie mi się podoba, ale jest jeden problem: typowanie . Nie wiem, jak ich używać i czym dokładnie są. Niektóre miejsca mówią, aby używać typowań, inne mówią, aby używać npm do instalowania definicji.

Jestem zdezorientowany!!

Author: Erik Philips, 2017-01-10

4 answers

JavaScript nie jest typowany, co oznacza, że możemy przekazywać i używać danych, obiektów i funkcji bez ograniczeń. Możemy napisać kod, który wywołuje metody, które nie istnieją na obiekcie, lub zmienne referencyjne, których nie mamy. Tego rodzaju błędy mogą być trudne do wykrycia podczas pisania kodu i mogą prowadzić do niestabilnego i błędnego kodu. Dokonywanie dużych zmian w kodzie może stać się trudne i ryzykowne, ponieważ nie widzisz od razu, czy niektóre zmiany są sprzeczne z resztą kodu gdzie indziej.

TypeScript polega głównie na dodawaniu typów do JavaScript. Oznacza to, że maszynopis wymaga dokładnego opisu formatu obiektów i danych. Gdy to zrobisz, oznacza to, że kompilator może zbadać Twój kod i wykryć błędy. Może zobaczyć, że próbujesz wywołać funkcję z niewłaściwym rodzajem argumentów lub odwołać się do zmiennej, która nie jest dostępna w bieżącym zakresie.

Kiedy sam piszesz maszynopis, to formalny opis kodeksu jest częścią samego Kodeksu.

Jednak, gdy używasz zewnętrznych bibliotek, takich jak jQuery lub moment.js, nie ma informacji o typach w tym kodzie. Więc aby używać go z maszynopisem, musisz również uzyskać pliki opisujące typy tego kodu. Są to pliki deklaracji typu , najczęściej o nazwie rozszerzenia pliku .d.ts. Na szczęście ludzie napisali tego rodzaju pliki deklaracji typu dla większości popularnych bibliotek javascript tam.

Typings było tylko narzędziem do instalacji tych plików. Obecnie najlepszą praktyką jest użycie npm .

Po zainstalowaniu tych plików, co w zasadzie oznacza tylko ich pobranie i umieszczenie w projekcie, kompilator maszynopisu zrozumie * ten Zewnętrzny kod i będziesz mógł korzystać z tych bibliotek. W przeciwnym razie dostałbyś tylko błędy wszędzie.

* w zależności od tego, jak skonfigurowałeś swój projekt i skonfigurowałeś go, być może trzeba będzie skonfigurować typescript, aby szukać tych plików specjalnie, lub może po prostu działać bez żadnej konfiguracji z twojej strony.

 155
Author: Alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-27 07:59:36

Co to są typy?

W skrócie, TypeScript dodaje statyczne typowanie do JavaScript. Ponieważ sam JavaScript nie definiuje takich definicji typów, muszą one zostać zapisane i włączone do procesu kompilacji maszynopisu za pomocą dodatkowych mechanizmów. Innymi słowy, biblioteka JavaScript może zdefiniować funkcję:

export function createPerson(name, age, initScore) { ... }  

Ale w statycznie wpisywanym środowisku TypeScript, byłoby o wiele bardziej przydatne dla programisty, aby mieć coś takiego to:

interface Person {
    name: string,
    age: number,
    score: number
}

export function createPerson(name: string, age: number, initScore?: number): Person;

Celem deklaracji typu , często nazywanych typami, definicje typów lub po prostu typy , mają wypełniać te szczegóły nad implementacjami, identyfikując w ten sposób niewłaściwe użycie API nawet w bibliotekach. Zazwyczaj znajdują się w plikach z rozszerzeniem .d.ts i mogą być zbudowane z plików .ts za pomocą kompilatora. Jednak gdy programy nie były napisane w maszynopisie, deklaracje te są zwykle pisane ręcznie.


Z to powiedziawszy, Twoje zamieszanie jest nieco uzasadnione: więcej niż jedno podejście do instalowania i zarządzania deklaracjami maszynopisu zostało wykonane w czasie. Obecnie jednak istnieje oficjalny (i dlatego zalecany) sposób instalacji i używania plików deklaracji, a to jest udokumentowane tutaj :

W TypeScript 2.0 znacznie łatwiejsze stało się korzystanie z plików deklaracji, pozyskiwanie, używanie i znajdowanie ich. Ta strona dokładnie opisuje, jak zrobić wszystkie trzy

[...]

Uzyskanie deklaracji typu w TypeScript 2.0 i nowszych nie wymaga żadnych narzędzi poza npm.

Jako przykład, pobranie deklaracji dla Angular jest tak proste, jak zainstalowanie tej zależności w projekcie:

npm install --save @types/angular 

Pakiety w przestrzeni nazw @types będą automatycznie rozpatrywane przez kompilator do pobierania deklaracji typu. Co więcej, jeśli te deklaracje są już wbudowane w pakiet npm, nie musisz robić nic innego niż instalowanie tego pakietu (przykładem takiego pakietu jest redux ). Aby uzyskać więcej informacji, zobacz dokumenty na tsconfig.json . Jest też cała sekcja o tworzeniu własnych plików deklaracji, co jest zalecane dla wszystkich programistów chcących dodać deklaracje typu do swoich bibliotek.

 22
Author: E_net4 the curator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-19 10:04:41

Postaram się to wyjaśnić prostym przykładem. Jeśli używasz bibliotek innych firm, takich jak jQuery w projektach Angular lub typescript

Możesz bezpośrednio odwołać się do pliku jquery (angular.plik json) w projektach Angular i napisz kod deklarując $ lub jQuery jak pokazano poniżej

Jak pokazano poniżej

declare var $: any;
ngOnInit() {
   $(document).ready(function() {
     alert('I am Called From jQuery');
   });
}

Kod będzie działał. Ale problem polega na tym, że typescript polega na sprawdzaniu typu i wykrywaniu błędów w kodzie tylko w momencie kompilacji.

Jak maszynopis robi Nie wiem nic o bibliotece jquery nie może wykonywać statyczne sprawdzanie typu. poniższy kod kompiluje się bez żadnych błędów

ngOnInit() {
   $(document).ready(function() {
     $('#my-button').click(1);
 });
}

Podaję zły parametr do kliknięcia funkcji jquery i powyższy kod się skompiluje i w czasie uruchomienia za każdym razem, gdy klikniemy na element przycisku, spowoduje to błąd.

To miejsce, w którym typowanie pojawia się w obrazie. Ale jeśli masz definicje typu dla wtyczki jquery, ten rodzaj błędu może być przechwycony tylko w czasie kompilacji.

Zainstaluj jQuery typuje z pakietów węzłów i referuje je w kodzie

npm install --save jquery
npm install --save @types/jquery

I zaimportuj obiekt jquery w kodzie jak pokazano poniżej

import * as $ from 'jquery';

A teraz powyższy kod nie kompiluje się i wyrzuca błąd mówiąc

Argument of type ‘1’ is not assignable to parameter of type ‘false | EventHandlerBase<HTMLElement, ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>>’

Możesz przeczytać więcej na Jak zainstalować i używać JQuery w projektach Angular

 1
Author: Arun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-02 06:12:39

Pracowałem tylko z maszynopisem w ASP.NET (klasyczny) projekt, więc nie mogę powiedzieć, jaki jest typowy sposób, aby to zrobić. Ale jest kilka nieco niekonwencjonalnych opcji:

  • Znajdź *.pliki d.ts samodzielnie i po prostu skopiuj je gdzieś do swojego projektu. Nie będą one jednak automatycznie aktualizowane wraz z Twoimi bibliotekami.
  • Zadeklaruj wszystko, co biblioteka daje Ci jako dowolne. Na przykład, możesz to zrobić dla JQuery, jeśli nie masz jeszcze zainstalowanych typów JQuery: declare var $: any;
 0
Author: libertyernie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-10 16:45:33