Bun runs .ts and .tsx files directly by transpiling them, never by type checking them. A file with genuine type errors runs to completion. Any project relying on Bun as its runtime still needs tsc --noEmit wired into CI, or type errors reach production untouched.
Bun also reads only a subset of compilerOptions. It honors paths and baseUrl for module resolution, jsx and the related JSX factory settings, and experimentalDecorators. Options that describe emit or checking behavior, including target, strict, and noUncheckedIndexedAccess, have no effect on what Bun executes.
The practical consequence is that path aliases work in Bun without a resolver plugin, while verbatimModuleSyntax violations and unerasable constructs behave according to Bun's own transpiler rather than TypeScript's rules. When output is being produced for another runtime, pass bun build --target=node, because the default target is bun and emits code that assumes Bun-specific globals.