---
title: "What's gone"
image: "https://hem.run/social/hem.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://hem.run/llms.txt
> Use this file to discover all available pages before exploring further.

# What's gone

`var`, `function`, `switch`, loose equality, truthiness, `null`/`undefined` literals, `any`, `enum`, `interface`, `namespace`, `this` outside classes, key-iterating `for..in`, C-style `for`, `do..while`, labels, `++`/`--`, the comma operator, declaration merging. Each has a typed replacement documented in the [removed constructs reference](https://hem.run/reference/removed-typescript). Everything on the removed list remains reserved and cannot be used as an identifier.

Two words are *not* on the removed list, though they might look reserved: **`type` and `error` are contextual keywords**. They open a declaration only at the start of a statement when an identifier follows (`type Id = string`, `error NotFound({ id: string })`); everywhere else they are ordinary names. So `let error = validate(input)`, `(type: string) => …`, `let { type } = event`, and `event.type` are all plain code. The reflex from TypeScript, where `type` is already contextual, carries straight over.

---

Core syntax emits TypeScript without an implicit Hem runtime. Explicit library imports, including the standard `Option` and `Result` carriers, remain runtime dependencies. Part II activates with `effectImportSource` to enable the [Effect](https://effect.website) extension. The compiler checks the configured module's required capabilities before lowering and reports HEM3001 if they are missing. Omit the option to keep Effect syntax and generated imports disabled.

Source: https://hem.run/tour/whats-gone/index.mdx
