TypeScript
The types generated by running wrangler types
provide the Service
and DurableObjectNamespace
types, each of which accepts a single type parameter for the server-side WorkerEntrypoint
or DurableObject
types.
We recommend extending the Env
type generated in a separate file and providing the type parameter there, so that these are not overwritten when you run wrangler types
again.
For example, if you had a Worker with bindings to a WorkerEntrypoint called SumService
and a Durable Object called Counter
, your wrangler types
output would look like this:
// Generated by Wrangler by running `wrangler types --env-interface BaseEnv`declare namespace Cloudflare { interface Env { SUM_SERVICE: Fetcher; COUNTER_OBJECT: DurableObjectNamespace; }}interface BaseEnv extends Cloudflare.Env {}
Then extend Env
type in a separate file:
interface Env extends BaseEnv { SUM_SERVICE: Service<import("../path/to/your/bound/worker").SumService>; COUNTER_OBJECT: DurableObjectNamespace<import("../path/to/your/do").Counter>;}
Using higher-order types, we automatically generate client-side stub types (e.g., forcing all methods to be async). In the following example, env.SUM_SERVICE.sum
will be typed as defined in the SumService
WorkerEntrypoint.
export default { async fetch(req, env, ctx): Promise<Response> { const result = await env.SUM_SERVICE.sum(1, 2); return new Response(result.toString()); },} satisfies ExportedHandler<Env>;
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Products
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- 2025 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark