Korzystanie z TypeScript
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
TypeScript to język rozszerzający JavaScript o definicje typów. Nowe projekty React Native domyślnie wykorzystują TypeScript, ale obsługują również JavaScript i Flow.
Rozpoczęcie pracy z TypeScript
Nowe projekty tworzone przez CLI React Native lub popularne szablony takie jak Ignite domyślnie używają TypeScript.
TypeScript można również używać z Expo, które udostępnia szablony TypeScript lub automatycznie zaproponuje instalację i konfigurację TypeScript po dodaniu pliku .ts lub .tsx do projektu.
npx create-expo-app --template
Dodawanie TypeScript do istniejącego projektu
- Dodaj TypeScript, typy i wtyczki ESLint do swojego projektu.
- npm
- Yarn
npm install -D typescript @react-native/typescript-config @types/jest @types/react @types/react-test-renderer
yarn add --dev typescript @react-native/typescript-config @types/jest @types/react @types/react-test-renderer
To polecenie dodaje najnowsze wersje wszystkich zależności. Wersje mogą wymagać dostosowania do istniejących pakietów w projekcie. Narzędzie takie jak React Native Upgrade Helper pokazuje wersje dostarczane z React Native.
- Dodaj plik konfiguracyjny TypeScript. Utwórz
tsconfig.jsonw głównym katalogu projektu:
{
"extends": "@react-native/typescript-config"
}
- Zmień rozszerzenie pliku JavaScript na
*.tsx
Należy pozostawić plik wejściowy
./index.jsbez zmian, w przeciwnym razie mogą wystąpić problemy podczas tworzenia produkcyjnej paczki aplikacji.
- Uruchom
tscaby sprawdzić typy w nowych plikach TypeScript.
- npm
- Yarn
npx tsc
yarn tsc
Korzystanie z JavaScript zamiast TypeScript
React Native domyślnie używa TypeScript w nowych aplikacjach, ale JavaScript nadal jest obsługiwany. Pliki z rozszerzeniem .jsx traktowane są jako JavaScript (nie TypeScript) i nie są sprawdzane typowo. Moduły JavaScript mogą być importowane przez moduły TypeScript i odwrotnie.
Jak działa TypeScript z React Native
Domyślnie źródła TypeScript są transformowane przez Babel podczas bundlowania. Zalecamy używanie kompilatora TypeScript wyłącznie do sprawdzania typów. To domyślne zachowanie tsc w nowych aplikacjach. Przy migracji istniejącego kodu TypeScript do React Native istnieją pewne ograniczenia związane z użyciem Babel zamiast TypeScript.
Przykładowy kod React Native z TypeScript
Możesz zdefiniować interfejs dla Propsów i Stanu komponentu React poprzez React.Component<Props, State>, co zapewni sprawdzanie typów i podpowiedzi w edytorze podczas pracy z komponentem w JSX.
import {useState} from 'react';
import {Button, StyleSheet, Text, View} from 'react-native';
export type Props = {
name: string;
baseEnthusiasmLevel?: number;
};
function Hello({name, baseEnthusiasmLevel = 0}: Props) {
const [enthusiasmLevel, setEnthusiasmLevel] = useState(
baseEnthusiasmLevel,
);
const onIncrement = () =>
setEnthusiasmLevel(enthusiasmLevel + 1);
const onDecrement = () =>
setEnthusiasmLevel(
enthusiasmLevel > 0 ? enthusiasmLevel - 1 : 0,
);
const getExclamationMarks = (numChars: number) =>
numChars > 0 ? Array(numChars + 1).join('!') : '';
return (
<View style={styles.container}>
<Text style={styles.greeting}>
Hello {name}
{getExclamationMarks(enthusiasmLevel)}
</Text>
<View>
<Button
title="Increase enthusiasm"
accessibilityLabel="increment"
onPress={onIncrement}
color="blue"
/>
<Button
title="Decrease enthusiasm"
accessibilityLabel="decrement"
onPress={onDecrement}
color="red"
/>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
},
greeting: {
fontSize: 20,
fontWeight: 'bold',
margin: 16,
},
});
export default Hello;
Składnię możesz poznać w TypeScript playground.
Przydatne źródła wiedzy
-
Ściągawka React + TypeScript zawiera dobre omówienie używania React z TypeScript
Używanie niestandardowych aliasów ścieżek z TypeScript
Aby używać niestandardowych aliasów ścieżek w TypeScript, należy skonfigurować je zarówno w Babelu, jak i TypeScript. Oto jak to zrobić:
- Edytuj
tsconfig.jsondodając niestandardowe mapowania ścieżek. Ustaw dostęp do plików w katalogusrcbez prefiksu ścieżki oraz umożliwij dostęp do plików testowych przeztests/File.tsx:
{
- "extends": "@react-native/typescript-config"
+ "extends": "@react-native/typescript-config",
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "*": ["src/*"],
+ "tests": ["tests/*"],
+ "@components/*": ["src/components/*"],
+ },
+ }
}
- Dodaj
babel-plugin-module-resolverjako zależność deweloperską:
- npm
- Yarn
npm install --save-dev babel-plugin-module-resolver
yarn add --dev babel-plugin-module-resolver
- Na koniec skonfiguruj
babel.config.js(zauważ, że składniababel.config.jsróżni się odtsconfig.json):
{
presets: ['module:metro-react-native-babel-preset'],
+ plugins: [
+ [
+ 'module-resolver',
+ {
+ root: ['./src'],
+ extensions: ['.ios.js', '.android.js', '.js', '.ts', '.tsx', '.json'],
+ alias: {
+ tests: ['./tests/'],
+ "@components": "./src/components",
+ }
+ }
+ ]
+ ]
}