# TypeScript

TypeScript version and module resolution requirements for Video.js packages

Video.js packages require **TypeScript 5.0 or newer**. TypeScript must also follow the import paths that each package publishes.

## TypeScript version

Video.js type files use syntax introduced in TypeScript 5.0. Older versions cannot read that syntax. The `skipLibCheck` option does not help because TypeScript must read a type file before it can skip checking it.

## Module resolution

Video.js packages define their supported import paths using [package exports](./bundlers.md). Most web applications should use the following configuration. It makes TypeScript follow the same package rules as the bundler that builds the application:

**tsconfig.json**

```json
{
  "compilerOptions": {
    "module": "ESNext",
    "moduleResolution": "bundler"
  }
}
```

If Node.js runs files emitted directly by TypeScript, use `node16` for both `module` and `moduleResolution`, or use `nodenext` for both.

Do not use the older `node` setting, now called `node10`. It does not understand package exports and can report valid Video.js imports or types as missing.

## Errors from other dependencies

The older `node` setting allowed applications to import almost any file inside a dependency. Modern settings allow only the paths that dependency publishes. Changing the setting can therefore reveal an existing import into another package’s private files.

If the error names a package outside `@videojs/*`, update that dependency or use one of its supported import paths. A TypeScript `paths` override can be a temporary bridge when no supported replacement exists. Do not switch back to the older resolver because that also breaks Video.js type resolution.

## Related pages

### Guides

- [Installation](./installation.md): Install Video.js packages and build an accessible, customizable video player with composable controls
- [Bundlers](./bundlers.md): Bundler requirements for Video.js package exports, CSS, and wrapper libraries