Skip to content

Installation

WarpDrive now provides a cli that will handle installation and configuration for you when installing the types-packages for native types to use with older releases (such as 4.12).

cli
npx warp-drive retrofit types@canary

The cli will

  • uninstall DT packages for ember-source and ember-data
  • add native types as sources to your ts-config for both ember-source and ember-data
  • install all required types packages for ember-data based on the dependencies in your package.json

The cli may also be used to update to the latest canary versions of the types by simply running the command again.

For additional documentation or to manuall install and configure, continue reading the below guide.


CAUTION

EmberData does not maintain the DefinitelyTyped types for EmberData (e.g. the @types/ember-data__*). If you were previously using these, you should uninstall them first.

IMPORTANT

EmberData's Native Types require the use of Ember's Native Types.

Type definitions need to be installed top-level, this means you have to install every EmberData package ember-data depends on.

TIP

When installing packages, use an NPM dist tag to get the latest version for a given channel. E.g. pnpm install ember-data@latest valid channels with types are latest, canary, v4-latest and v4-canary

There are currently two ways to gain access to EmberData's native types.

  1. Use A Version That Has Types

  2. Use Official Types Packages with releases >= 4.12.*


Using Versions That Supply Types

The following versions supply their own type definitions. These type definitions will still need to be configured for use in tsconfig.

  • Versions of 4.x >= 4.13.0-alpha.0
  • Versions of 5.x >= 5.3.8

In order to use the types for these versions, the dependencies of ember-data (and their peer-dependencies) must also be added to package.json.

Generally that means the following packages are needed, though you may need fewer (or more!) depending on if you have migrated away from Adapter/Serializer and replaced Model with SchemaRecord:

NameLatestCanaryV4
ember-dataNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/adapterNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/graphNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/json-apiNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/legacy-compatNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/modelNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/requestNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/request-utilsNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/serializerNPM Stable VersionNPM Canary VersionNPM V4 Version
@ember-data/storeNPM Stable VersionNPM Canary VersionNPM V4 Version
@warp-drive/core-typesNPM Latest VersionNPM Canary VersionNPM V4 Version

Here's a single install command for pnpm. Swap pnpm for yarn or npm as needed.

PACKAGES=("@types/ember" "@types/ember-data" "@types/ember-data__adapter" "@types/ember-data__model" "@types/ember-data__serializer" "@types/ember-data__store" "@types/ember__application" "@types/ember__array" "@types/ember__component" "@types/ember__controller" "@types/ember__debug" "@types/ember__destroyable" "@types/ember__engine" "@types/ember__error" "@types/ember__helper" "@types/ember__modifier" "@types/ember__object" "@types/ember__owner" "@types/ember__routing" "@types/ember__runloop" "@types/ember__service" "@types/ember__string" "@types/ember__template" "@types/ember__test" "@types/ember__utils" "ember-data" );

for pkg in "${PACKAGES[@]}"; do pnpm remove "$pkg"; done

pnpm install ember-data@latest @ember-data/adapter@latest @ember-data/graph@latest @ember-data/json-api@latest @ember-data/legacy-compat@latest @ember-data/model@latest @ember-data/request@latest @ember-data/request-utils@latest @ember-data/serializer@latest @ember-data/store@latest @warp-drive/core-types@latest

Here's an example change to package.json which drops all use of types from @types/ for both Ember and EmberData and adds the appropriate canary packages.

diff
-    "@types/ember": "4.0.11",
-    "@types/ember-data": "4.4.16",
-    "@types/ember-data__adapter": "4.0.6",
-    "@types/ember-data__model": "4.0.5",
-    "@types/ember-data__serializer": "4.0.6",
-    "@types/ember-data__store": "4.0.7",
-    "@types/ember__application": "4.0.11",
-    "@types/ember__array": "4.0.10",
-    "@types/ember__component": "4.0.22",
-    "@types/ember__controller": "4.0.12",
-    "@types/ember__debug": "4.0.8",
-    "@types/ember__destroyable": "4.0.5",
-    "@types/ember__engine": "4.0.11",
-    "@types/ember__error": "4.0.6",
-    "@types/ember__helper": "4.0.7",
-    "@types/ember__modifier": "4.0.9",
-    "@types/ember__object": "4.0.12",
-    "@types/ember__owner": "4.0.9",
-    "@types/ember__routing": "4.0.22",
-    "@types/ember__runloop": "4.0.10",
-    "@types/ember__service": "4.0.9",
-    "@types/ember__string": "3.16.3",
-    "@types/ember__template": "4.0.7",
-    "@types/ember__test": "4.0.6",
-    "@types/ember__utils": "4.0.7",
-    "ember-data": "~5.3.3",
+    "ember-data": "5.4.1-alpha.64",
+    "@ember-data/store": "5.4.1-alpha.64",
+    "@ember-data/adapter": "5.4.1-alpha.64",
+    "@ember-data/graph": "5.4.1-alpha.64",
+    "@ember-data/json-api": "5.4.1-alpha.64",
+    "@ember-data/legacy-compat": "5.4.1-alpha.64",
+    "@ember-data/request": "5.4.1-alpha.64",
+    "@ember-data/request-utils": "5.4.1-alpha.64",
+    "@ember-data/serializer": "5.4.1-alpha.64",
+    "@ember-data/model": "5.4.1-alpha.64",
+    "@warp-drive/core-types": "0.0.0-alpha.50",

TIP

If your package manager enables deduping, we recommend deduping types as much as possible.

TIP

It is best to ensure no other dependencies are still bringing @types/* packages as this will cause weird type bugs.


Using Types Packages

WARNING

When consuming types in this way, you may sometimes encounter a misalignment between the types and the actual API. These misalignments should be rare for 4.12.* => 5.4.*. Overall, even when these misalignments occur, we suspect there are fewer mistakes or issues with these types than in the DefinitelyTyped types.

Every package in the project that ships types also publishes its types under a second package name. This enables older releases to consume these types instead of relying on the DefinitelyTyped project.

These types-only packages have the same version number as the version they were published with, and their org or name is suffixed with -types.

Required Packages for Types

NameTypes PackageVersion
ember-dataember-data-typesNPM Canary Version
@ember-data/adapter@ember-data-types/adapterNPM Canary Version
@ember-data/graph@ember-data-types/graphNPM Canary Version
@ember-data/json-api@ember-data-types/json-apiNPM Canary Version
@ember-data/legacy-compat@ember-data-types/legacy-compatNPM Canary Version
@ember-data/model@ember-data-types/modelNPM Canary Version
@ember-data/request@ember-data-types/requestNPM Canary Version
@ember-data/request-utils@ember-data-types/request-utilsNPM Canary Version
@ember-data/serializer@ember-data-types/serializerNPM Canary Version
@ember-data/store@ember-data-types/storeNPM Canary Version
@warp-drive/core-types@warp-drive-types/core-typesNPM Canary Version

Here's a single install command for pnpm. Swap pnpm for yarn or npm as needed.

pnpm install ember-data-types@canary @ember-data-types/adapter@canary @ember-data-types/graph@canary @ember-data-types/json-api@canary @ember-data-types/legacy-compat@canary @ember-data-types/model@canary @ember-data-types/request@canary @ember-data-types/request-utils@canary @ember-data-types/serializer@canary @ember-data-types/store@canary @warp-drive-types/core-types@canary

Here's an example change to package.json which drops all use of types from @types/ for both Ember and EmberData and adds the appropriate canary packages.

diff
-    "@types/ember": "4.0.11",
-    "@types/ember-data": "4.4.16",
-    "@types/ember-data__adapter": "4.0.6",
-    "@types/ember-data__model": "4.0.5",
-    "@types/ember-data__serializer": "4.0.6",
-    "@types/ember-data__store": "4.0.7",
-    "@types/ember__application": "4.0.11",
-    "@types/ember__array": "4.0.10",
-    "@types/ember__component": "4.0.22",
-    "@types/ember__controller": "4.0.12",
-    "@types/ember__debug": "4.0.8",
-    "@types/ember__destroyable": "4.0.5",
-    "@types/ember__engine": "4.0.11",
-    "@types/ember__error": "4.0.6",
-    "@types/ember__helper": "4.0.7",
-    "@types/ember__modifier": "4.0.9",
-    "@types/ember__object": "4.0.12",
-    "@types/ember__owner": "4.0.9",
-    "@types/ember__routing": "4.0.22",
-    "@types/ember__runloop": "4.0.10",
-    "@types/ember__service": "4.0.9",
-    "@types/ember__string": "3.16.3",
-    "@types/ember__template": "4.0.7",
-    "@types/ember__test": "4.0.6",
-    "@types/ember__utils": "4.0.7",
+    "@ember-data-types/adapter": "^5.4.1-alpha.64",
+    "@ember-data-types/model": "^5.4.1-alpha.64",
+    "@ember-data-types/serializer": "^5.4.1-alpha.64",
+    "@ember-data-types/store": "^5.4.1-alpha.64",
+    "@ember-data-types/graph": "^5.4.1-alpha.64",
+    "@ember-data-types/json-api": "^5.4.1-alpha.64",
+    "@ember-data-types/legacy-compat": "^5.4.1-alpha.64",
+    "@ember-data-types/request": "^5.4.1-alpha.64",
+    "@ember-data-types/request-utils": "^5.4.1-alpha.64",
+    "@warp-drive-types/core-types": "^0.0.0-alpha.50",
     "ember-data": "^4.12.7",
+    "ember-data-types": "^5.4.1-alpha.64",

Released under the MIT License.