HIGH

typescript/open-dictionary-value

An open dictionary whose value type is `unknown`, `any`, `object` or `{}` (`Record<string, unknown>`, `{ [key: string]: unknown }`). Every read needs an unchecked assertion. Not when it is a generic constraint (`T extends Record<string, unknown>`), a finite key set (`Record<Status, number>`), the subject of a type predicate or parser at the boundary (`value is Record<string, unknown>`), or a bag a specification defines as open (SARIF `properties`, GraphQL `variables`).

Decided by
review judgement
Severity means
merge is a deliberate trade-off a reviewer acknowledges. The output contract
Applies to
**/*.ts, **/*.tsx, **/*.mts, **/*.cts
Reaches
12 profiles: fullstack-react-node, javascript-typescript, javascript-typescript-browser, mobile-react-native, service-express, service-node, typescript-effect, web-angular, web-nextjs, web-react, web-svelte, web-vue
Defined in
standards/stacks/typescript.md:30

Read it in the terminal

The same facts, from the checkout you are already in — no browser, and no network.

terminal
$ npx redlinegate explain typescript/open-dictionary-value

Where this came from

You are most likely here from a review comment. A finding names its rule and, when your repository has told Redline where the standard is published, its address:

on the pull request
Redline/HIGH [typescript/open-dictionary-value]: …
  → …/r/typescript/open-dictionary-value

That second line is written by redline init --docs-url and is empty until an organisation sets one — there is no default, because a link to somebody else's copy of the standard is worse than no link. See Onboard a repository.

In context

The TypeScript standard lists this rule with the rest of its stack, in the file a reviewer and an AI assistant both read.

Other HIGH rules in this stack