When you’re certain a value will be initialized but TypeScript can’t infer this, use the definite assignment assertion operator (!
) instead of as any
or suppressing type errors. This maintains type safety while avoiding unnecessary null checks throughout your codebase.
Avoid this pattern:
// Creates unnecessary undefined checks everywhere
#agent: Agent<Env, State> | undefined;
// Or suppressing valid type concerns
// @ts-expect-error TODO: fix this type error
await this._drainStream(response.body);
// Or forcing types unsafely
}) as any
Instead, use definite assignment assertions when you know the value will be there:
// Tells TypeScript "trust us, it'll always be there"
#agent: Agent<Env, State>!;
Or add proper null checks when the value might actually be null:
// When the value could legitimately be null/undefined
if (response.body) {
const reader = response.body.getReader();
// ... handle the stream
}
This approach maintains TypeScript’s null safety benefits while eliminating false positives that lead to code pollution or unsafe type assertions.
Enter the URL of a public GitHub repository