--- outline: deep --- # TypeScript The main file for application specific TypeScript declarations can be found at `src/declarations.ts`. ## Compilation In order to compile and start the application use ``` npm run compile npm start ``` For development with live reload use ``` npm run dev ```
To get the latest types in the [client](./client.md) and any time before `npm start`, `npm run compile` needs to run.
## Configuration Types The `Configuration` interface defines the types for [app.get](../../api/application.md#getname) and [app.set](../../api/application.md#setname-value). It is extended from the type inferred from the [configuration schema](./configuration.md#configuration-schemas). Since you can store anything global to the application in `app.get` and `app.set`, you can add additional types that are not part of the initial application configuration here. ```ts // The types for app.get(name) and app.set(name) // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface Configuration extends ApplicationConfiguration { startupTime: Date } ```
Both `Configuration` and `ServiceTypes` need to be declared as an `interface` (even if it is empty) so they can be extended via `declare module` in other files. Do not remove the `eslint-disable-next-line` comments.
## Service Types The `ServiceTypes` interface contains a mapping of all service paths to their service type so that [app.use](../../api/application.md#usepath-service--options) and [app.service](../../api/application.md#servicepath) use the correct type. ```ts // A mapping of service names to types. Will be extended in service files. // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ServiceTypes {} ``` Usually the `ServiceTypes` interface is not modified directly in this file but instead extended via `declare module` in the files where the services are registered. This usually looks like this: ```ts // Add this service to the service type index declare module '../../declarations' { interface ServiceTypes { users: UserService } } ``` ## Application The `Application` interface is the type for the main [app object](./app.md) using the [ServiceTypes](#service-types) interface as the service index and [ConfigurationTypes](#configuration-types) for `app.get` and `app.set`. ```ts // The application instance type that will be used everywhere else export type Application = FeathersApplication ```
Always use `import { Application } from './declarations'` to get the proper service and configuration typings. You normally do **not** need to use `import { Application } from '@feathersjs/feathers'` directly.
## Hook Context The `HookContext` type exports a [hook context](../../api/hooks.md) type with the `Application` and a generic service type `S`. ```ts // The context for hook functions - can be typed with a service class export type HookContext = FeathersHookContext ``` Use `HookContext>` to get the full hook context for a service. ## Services and Params See the [services chapter](./service.md) for more information on service and parameter typings.
Please pick **TypeScript** as the Code language in the main menu dropdown.