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-dev
Usage
š 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 acceptstrue
if inferred type isT
, and only acceptsfalse
if 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 dependencies
npm test # š run the tests
npm run coverage # š check code coverage
npm run lint # š check code style
npm run lint:fix # š fix trivial stylistic issues
When making a PR, make sure all checks pass. Specifically, run tests, check coverage and check the linter to ensure they all pass.