Pomoc

JavaScript na TypeScript: z PropTypes do interfejsów

Tutaj zamienisz JavaScript na TypeScript i oszczędzisz sobie pierwszego, nudnego etapu migracji. Konwerter czyta twój kod parserem, zamienia React PropTypes w interfejsy, bierze typy z wartości domyślnych i dodaje te, które da się ustalić, a potem zwraca sformatowany TypeScript. Pracuje na jednym pliku lub fragmencie naraz, nigdy nie uruchamia twojego kodu i niczego nie wysyła.To, czego nie może wiedzieć, zostawia tobie. Sekcje poniżej mówią dokładnie, co to jest.


JavaScript do TypeScript online: jak to zrobić krok po kroku

  1. Wklej kod do pola JavaScript lub JSX. Dopóki nic nie wkleisz, widać tam "Wklej tutaj JavaScript lub JSX…". Limit to 5 000 000 znaków.
  2. Poczekaj chwilę. Narzędzie konwertuje w trakcie pisania lub wklejania, około 0,35 sekundy po ostatniej zmianie, więc nie ma przycisku do naciśnięcia.
  3. Przeczytaj wynik pod nagłówkiem "TypeScript", a gdy kod zawiera JSX, pod nagłówkiem "TypeScript (TSX)". Jest pokazany jako podświetlony kod tylko do odczytu.
  4. Sprawdź informacje nad kodem. Mówią, co zostało zrobione, na przykład "Zapisano 2 interfejsy" albo "Dodano 11 adnotacji typu". Jeśli nic nie wymagało typu, zobaczysz "Nic tutaj nie wymagało typu, więc kod został tylko sformatowany ponownie."
  5. Wybierz Kopiuj do schowka. Przycisk zmieni się na "Skopiowano".
  6. Pod kodem są Opcje konwersji z dwoma polami wyboru, Tryb React i Tryb Strict. Gdy zmienisz któreś, kod jest konwertowany ponownie.

Jeśli tekst nie jest poprawnym JavaScriptem, zobaczysz "To nie jest poprawny JavaScript: błąd składni w wierszu N, kolumnie M." razem z wierszem, którego dotyczy błąd, i znacznikiem pod nim. Kod, który już zawiera składnię TypeScriptu, jest uznawany za niepoprawny. Narzędzie działa na wklejonym kodzie, więc pasuje do komponentu, modułu lub fragmentu, a nie do całego repozytorium.

Przykład: komponent React z PropTypes

Wejściem jest mały licznik z PropTypes i procedurą obsługi zdarzenia bez typu. Konwerter zapisuje interfejs CounterProps: label jest wymagany z powodu isRequired, a start i onChange są opcjonalne. Wartość domyślna n = 1 daje n: number = 1, a procedura onClick na elemencie button nadaje e typ React.MouseEvent dla elementu przycisku. Nieużywany import prop-types znika, a Prettier rozkłada JSX na kilka wierszy. W sumie narzędzie podaje 1 interfejs i 3 adnotacje typu.

Co się nie zmienia: useState(start) zostaje takie, jak było, bo konwerter nie zgaduje typu na podstawie tego, jak używana jest wartość.

React PropTypes TypeScript: jak PropTypes stają się interfejsem

Przy włączonym trybie React konwerter zapisuje z PropTypes komponentu interfejs o nazwie NazwaProps, umieszcza go nad komponentem i za jego pomocą typuje propsy. Działa to dla komponentów funkcyjnych (deklaracji, funkcji strzałkowych i opakowanych w memo) oraz dla klas ze statycznym propTypes lub przypisaniem Foo.propTypes = {...}. Prop z .isRequired jest wymagany, każdy inny dostaje ?. Komentarze nad propem przechodzą do interfejsu.

Instrukcja propTypes jest usuwana, a razem z nią import prop-types, jeśli nic innego go nie używa. Komponent klasowy dostaje też interfejs stanu z this.state = {...}. Klasa bez PropTypes dostaje interfejs propsów zbudowany z odczytanych this.props.x. Komponent funkcyjny bez PropTypes dostaje interfejs propsów tylko w trybie Strict.

JSX na TSX i typy dodawane bez PropTypes

Żeby przejść z jsx na tsx, wystarczy wkleić komponent: gdy kod zawiera JSX, wynik ma nagłówek "TypeScript (TSX)". Tryb Strict jest domyślnie wyłączony. Włącz go, żeby zobaczyć wszystkie luki. Zapisuje jawne any tam, gdzie nie da się ustalić typu: let x; staje się let x: any;, const list = [] staje się any[], a parametry bez typu dostają : any. Przy wyłączonym trybie te miejsca zostają bez typu. Po włączeniu łatwo wyszukać listę rzeczy do poprawienia.

Czego konwerter nie rusza, komentarze i prywatność

Czyta jeden kawałek kodu i niczego nie zgaduje. Te przypadki zostają bez zmian albo stają się any:

Wynik to pierwsze podejście, a nie skończona migracja. Wklej go do projektu, uruchom tsc i dopracuj każde any ręcznie. Konwerter nie zmienia nazw plików, więc zapisz komponent jako .tsx samodzielnie.

Komentarze i układ zostają zachowane: kod jest czytany przez @babel/parser, każda adnotacja jest wstawiana do twojego oryginalnego tekstu jako edycja, a potem Prettier formatuje wynik, zachowując twoje cudzysłowy, średniki i szerokość wcięcia. Wszystko działa w Web Workerze w twojej przeglądarce, a twój kod nigdy nie jest wysyłany ani uruchamiany. Żeby uporządkować kod przed konwersją, użyj narzędzia Formatowanie kodu. Żeby najpierw zrozumieć zminifikowany lub zaciemniony skrypt, użyj narzędzia Deobfuskator JavaScript.


Najczęstsze pytania

Jak zrobić z JavaScript TypeScript online?

Wklej JavaScript lub JSX do pola "JavaScript lub JSX". Około jedną trzecią sekundy później TypeScript pojawia się pod nagłówkiem "TypeScript", a przy JSX pod nagłówkiem "TypeScript (TSX)". Nie ma przycisku konwersji. Wynik zabierzesz przyciskiem "Kopiuj do schowka".

Czy ten JavaScript to TypeScript converter zamieni React PropTypes w interfejs?

Tak. Przy włączonym trybie React każdy obiekt propTypes staje się interfejsem nazwanym od komponentu, na przykład CounterProps. Prop z isRequired jest wymagany, a każdy inny dostaje znak zapytania. Instrukcja propTypes jest usuwana, a razem z nią import prop-types, jeśli nic innego w pliku go nie używa. Działa to dla komponentów funkcyjnych i klas ze statycznym propTypes.

Jak przejść z JSX na TSX?

Wklej komponent JSX. Gdy kod zawiera JSX, wynik ma nagłówek "TypeScript (TSX)", a tryb React włącza się sam, więc propsy dostają interfejs, a procedury obsługi typy zdarzeń. Narzędzie nie zmienia nazw plików. Zapisz wynik w projekcie z rozszerzeniem .tsx.

Co robią tryb React i tryb Strict?

Tryb React, w "Opcje konwersji", zamienia PropTypes w interfejsy i typuje procedury obsługi zdarzeń, propsy i hooki. Jest domyślnie włączony, gdy kod zawiera JSX, react lub prop-types, a po wyłączeniu PropTypes zostają bez zmian. Tryb Strict jest domyślnie wyłączony i zapisuje jawne any tam, gdzie nie da się ustalić typu, zamiast go pomijać.

Dlaczego w wyniku nadal jest any?

Typ jest zapisywany tylko wtedy, gdy da się go odczytać z samego kodu. Własny walidator PropTypes lub typ zaimportowany z innego pliku staje się any, a tryb Strict dodaje jawne any do zmiennych i parametrów bez typu. Wynik to pierwsze podejście. Uruchom go przez tsc i zastąp any prawdziwymi typami.

Dlaczego parametr callbacka nie dostał typu?

Parametr przekazany wprost do wywołania, jak x w items.map((x) => x.id), jest celowo zostawiany bez zmian, żeby TypeScript mógł go nadal otypować na podstawie funkcji, która odbiera callback.

Czy komentarze i formatowanie zostają zachowane?

Komentarze zostają, bo adnotacje są wstawiane do twojego oryginalnego kodu jako edycje tekstu, a kod nie jest budowany od nowa. Potem przechodzi przez Prettier, który zachowuje twoje cudzysłowy, średniki i szerokość wcięcia, ale może na nowo zawinąć długie wiersze. Komentarze nad pozycją PropTypes przechodzą do odpowiedniej właściwości interfejsu.

Czy mój kod jest wysyłany lub uruchamiany?

Nie. Kod jest analizowany i przepisywany w twojej przeglądarce, w Web Workerze, i nigdy nie trafia na serwer. Nie jest też nigdy uruchamiany. Przy błędzie składni zobaczysz komunikat z numerem wiersza i kolumny. Limit to 5 000 000 znaków.

Polecane

Pomaga utrzymać narzędzia za darmo. ✨

Zdjęcia poglądowe. Jestem Partnerem Amazon i otrzymuję wynagrodzenie z tytułu określonych zakupów dokonywanych za moim pośrednictwem.