A transformer to use for loading TypeScript files with react-native >= 0.45
It currently uses Babel as a secondary compilation step for simplicity's sake, and to enable synthetic default imports. A planned feature is to allow bypassing babel for people who don't use synthetic default imports.
yarn add --dev react-native-typescript-transformer typescript
Make sure your tsconfig.json has the following:
{
"compilerOptions": {
"target": "es2015",
"module": "es2015",
"jsx": "react-native",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true
}
}"module" can be "commonjs" if you don't care about allowing synthetic default imports (in which case that field can also be false)
"target" can probably be anything supported by your babel setup, I suppose.
"jsx" can also be "preserve", they are functionally identical if you don't emit files.
Add this to your rn-cli.config.js (make one if you don't have one already):
module.exports = {
getTransformModulePath() {
return require.resolve('react-native-typescript-transformer')
},
getSourceExts() {
return ['ts', 'tsx'];
}
}If you are using create-react-native-app You need to tell Expo to look for the
cli config file. Add the packagerOpts.config property to your app.json, e.g.
{
"expo": {
"sdkVersion": "18.0.0",
"packagerOpts": {
"config": "rn-cli.config.js"
}
}
}If you need to run the packager directly from the command line, pass these
--transformer node_modules/react-native-typescript-transformer --sourceExts ts,tsx
Note that the platform-specific index files (index.ios.js, index.android.js, etc) still need to be .js files, but everything else can be TypeScript.
MIT