Skip to content

A type helper to match the user's noUncheckedIndexedAccess setting

License

Notifications You must be signed in to change notification settings

EskiMojo14/uncheckedindexed

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

uncheckedindexed

Some type helpers to match the user's noUncheckedIndexedAccess setting

Installation

Install via npm:

npm install uncheckedindexed

Exports

UncheckedIndexedAccess<T>

The most common use case - Evaluates to T | undefined if noUncheckedIndexedAccess is enabled, otherwise evaluates to T.

import type { UncheckedIndexedAccess } from "uncheckedindexed";

type SelectById<T> = (
  record: Record<string, T>,
  id: string
) => UncheckedIndexedAccess<T>;

IfUncheckedIndexedAccess<True, False>

Evaluates to True if noUncheckedIndexedAccess is enabled, otherwise evaluates to False.

import type { IfUncheckedIndexedAccess } from "uncheckedindexed";

type SelectById<T> = (
  record: Record<string, T>,
  id: string
) => IfUncheckedIndexedAccess<T | undefined, T>;

Explanation

Currently, there is no officially supported way to see if the user has noUncheckedIndexedAccess enabled.

There is a feature request for compiler settings to be available as Types - please support it if this is something you would find useful!

However, it is possible to detect:

const testAccess = ({} as Record<string, 0>)["a"]; // will be 0 | undefined if enabled, otherwise 0

This sort of test is impossible to make in a .d.ts, as it would be compiled down to

declare const testAccess: 0;

based on the package's noUncheckedIndexedAccess setting.

This package keeps its type declarations in a .ts file, where this limitation isn't the case and the value is evaluated by the user's TypeScript properly.

type IfMaybeUndefined<T, True, False> = [undefined] extends [T] ? True : False;

const testAccess = ({} as Record<string, 0>)["a"];

export type IfUncheckedIndexedAccess<True, False> = IfMaybeUndefined<
  typeof testAccess,
  True,
  False
>;

export type UncheckedIndexedAccess<T> = IfUncheckedIndexedAccess<
  T | undefined,
  T
>;

About

A type helper to match the user's noUncheckedIndexedAccess setting

Resources

License

Stars

Watchers

Forks

Packages

No packages published