The primitive types mirror JavaScript's runtime primitives: `number` for all numeric values (there's no separate int/float), `string`, `boolean`, `null`, and `undefined`.
Annotations follow a colon after the identifier. TypeScript can often infer them, so annotate when it improves clarity or when there's no initializer to infer from.
ts let blockNumber: number = 18_000_000; let network: string = "mainnet"; let isTestnet: boolean = false; let owner: string | undefined;
`any` disables type checking for a value entirely — useful for gradual migration, but it defeats the purpose of TypeScript if overused. Prefer `unknown` when you must accept an untyped value but still want safety.