ts-inference-check v0.3.0
ts-inference-check
Make sure TypeScript is making the expected type inference from your types.
npm i ts-inference-check --save-devUsage
š Check if inferred type of some obj is SomeType (and is not SomeOtherType):
import { type } from 'ts-inference-check'
type(obj).is<SomeType>(true)
type(obj).is<SomeOtherType>(false)āļø type(...).is<T>(true) will result in a compiler error if inferred type is not T.
Similarly, type(...).is<T>(false) will result in a compiler error if inferred type is T.
Example usage in Jest (you can use with any testing library):
import { type } from 'ts-inference-check'
test('something', () => {
// ...
expect(type(obj).is<SomeType>(true)).toBe(true)
expect(type(obj).is<SomeOtherType>(false)).toBe(false)
// ...
})š”
type(...).is<T>()only acceptstrueif inferred type isT, and only acceptsfalseif inferred type is notT. It will return the given value untouched. All other methods oftype(...)ortype<T>()behave in the same manner.
š Check if inferred type is subtype of SomeType (and is not subtype of SomeOtherType):
type(obj).extends<SomeType>(true)
type(obj).extends<SomeOtherType>(false)š Check if inferred type is super type of SomeType (and is not supertype of SomeOtherType):
type(obj).isExtendedBy<SomeType>(true)
type(obj).isExtendedBy<SomeOtherType>(false)š Pass type arguments instead of values:
type<A>().is<B>(true)
type<A>().extends<B>(true)
type<A>().isExtendedBy<B>(true)Strict Checks
š any passes most of the checks described above. Use type(...).strictly to avoid this:
type(obj).strictly.is<SomeType>(true)
type(obj as any).is<SomeType>(true)
type(obj as any).strictly.is<SomeType>(false)type(obj as any).extends<SomeType>(true)
type(obj as any).strictly.extends<SomeType>(false)
type(obj as any).isExtendedBy<SomeType>(true)
type(obj as any).strictly.isExtendedBy<SomeType>(false)š Use .isAny() to check if inferred type is any:
type(obj as any).isAny(true)
type(obj).isAny(false)Contribution
Simply be nice and respectful to other people. Here are some useful commands for contributing:
git clone git@github.com:loreanvictor/ts-inference-check.git # š clone the code (generally fork it before cloning though)npm i # š install all dependenciesnpm test # š run the testsnpm run coverage # š check code coveragenpm run lint # š check code stylenpm run lint:fix # š fix trivial stylistic issuesWhen making a PR, make sure all checks pass. Specifically, run tests, check coverage and check the linter to ensure they all pass.