Fundamentals
Core
Master
Shaders
Typescript
This course is entirely written in JavaScript but you can also use TypeScript with React Three Fiber.
TypeScript is a superset of JavaScript that adds types to the language. It's a great way to catch errors early and to have a better developer experience with auto completion and documentation.
The choice of using TypeScript or not is up to you. To help you decide, here are some questions you should think about:
- The kind of project you are building: Are you drafting a 3D experience or building with the intent to ship it? Is it a small project or a big one? Is it meant to be maintained for a long time?
- Your team: Are you working alone or with other people? Like comments, types are a great way to make your code more understandable for others.
There is no right or wrong answer, it's up to you to decide what's best for your project. As the library is written in TypeScript, you can benefit from it even if you are using JavaScript.
Together we will see how to easily convert our starter project to TypeScript and how to use it with React Three Fiber.
But this lesson is not a TypeScript tutorial, if you have no experience and want to learn more about it, you should start here.
Setup
In the setup lesson, we created a new project from scratch using Vite. If you're starting a new project, you can follow the same steps and choose the TypeScript variant to your project instead of the JavaScript one. (Don't forget to come back here after to discover how to use it ðŸ¤)
Let's see how to convert an existing project to TypeScript instead.
The starter project is the same as the final result of the setup lesson, but the steps are the same for any project.
Install TypeScript
First, we need to install TypeScript in our project. We can do that with the following command:
yarn add -D typescript
-D
will install TypeScript as a dev dependency. (As it's not needed in the final production build)
TypeScript adds a new step to our build process. We need to compile our TypeScript files to JavaScript before running our project. To do that, we need to update our package.json
build script to the following:
"build": "tsc && vite build"
The tsc
command will compile our TypeScript files to JavaScript and the vite build
command will build our project as usual.
The extension of our files will become .tsx
instead of .jsx
and .ts
instead of .js
. Still in the package.json
file, we can adjust the lint
script to take that into account:
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
TypeScript configuration
We need to create a tsconfig.json
file at the root of our project to configure TypeScript:
{ "compilerOptions": { "target": "ES2020", "useDefineForClassFields": true, "lib": ["ES2020", "DOM", "DOM.Iterable"], "module": "ESNext", "skipLibCheck": true, /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, "resolveJsonModule": true, "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", /* Linting */ "strict": true, "noUnusedLocals": true, "noUnusedParameters": true, "noFallthroughCasesInSwitch": true }, "include": ["src"], "references": [{ "path": "./tsconfig.node.json" }] }
And a tsconfig.node.json
:
{ "compilerOptions": { "composite": true, "skipLibCheck": true, "module": "ESNext", "moduleResolution": "bundler", "allowSyntheticDefaultImports": true }, "include": ["vite.config.ts"] }
These are the default options for a React project using Vite. You can find more information about them in the compiler options documentation page.
ESLint configuration
We need to update our .eslintrc.cjs
file to take TypeScript into account:
module.exports = { env: { browser: true, es2020: true }, extends: [ "eslint:recommended", "plugin:react/recommended", "plugin:react/jsx-runtime", "plugin:@typescript-eslint/recommended", "plugin:react-hooks/recommended", "plugin:@react-three/recommended", ], parser: "@typescript-eslint/parser", settings: { react: { version: "18.2" } }, plugins: ["react-refresh"], rules: { "react-refresh/only-export-components": "warn", }, };
It requires two new packages:
yarn add -D @typescript-eslint/eslint-plugin @typescript-eslint/parser
End of lesson preview
To get access to the entire lesson, you need to purchase the course.