ts-infer 🇧🇷
Typing inference for typescript testing units
Test the creation of complex generic types.
npm install ts-infer
yarn add ts-infer
import infer from 'ts-infer'
test('Attribute constraint inference', () => {
expect(() => {
infer(() => {
interface User {
id: string
name: string
isAuthenticated: boolean
}
type PropsOfUser = User[keyof User] // string | boolean
let propOfUser: PropsOfUser
// @ts-ignore
propOfuser = 5
})
}).toThrow()
})
The infer ()
function checks for compilation errors in the provided callback
and throws an exception if it contains errors. A second argument with the compiler options can be provided. If omitted, the same file as the dependent project will be used.
IMPORTANT: The use of @ ts-ignore
is necessary to avoid errors when compiling the test file. These lines will be removed by infer ()
before inference.
import { diagnose } from 'ts-infer'
test('Attribute constraint diagnostic', () => {
const diagnostics = diagnose(() => {
interface User {
id: string
name: string
isAuthenticated: boolean
}
type PropsOfUser = User[keyof User] // string | boolean
let propOfUser: PropsOfUser
// @ts-ignore
propOfuser = 5
// @ts-ignore
propOfuser = Array<number>()
})
expect(diagnostics.length).toBe(2)
})
The diagnose()
is similar to infer()
, but it returns a list of errors instead of throwing an exception.
Inferência de tipagem para unidades de testes em typescript
Testar a criação de tipos genéricos complexos.
npm install ts-infer
yarn add ts-infer
import infer from 'ts-infer'
test('Inferência de restrição de atributos', () => {
expect(() => {
infer(() => {
interface User {
id: string
name: string
isAuthenticated: boolean
}
type PropsOfUser = User[keyof User] // string | boolean
let propOfUser: PropsOfUser
// @ts-ignore
propOfuser = 5
})
}).toThrow()
})
A função infer()
verifica erros de compilação no callback
fornecido como argumento e lança uma exceção caso a mesma contenha erros. Um segundo argumento com as opções de compilação pode ser fornecido. Se omitido, será usado o mesmo arquivo do projeto dependente.
IMPORTANTE: O uso de @ts-ignore
é necessário para não haver erros na compilação do arquivo de teste. Essas linhas serão removidas por infer()
antes da inferência.
import { diagnose } from 'ts-infer'
test('Diagnóstico de restrição de atributos', () => {
const diagnostics = diagnose(() => {
interface User {
id: string
name: string
isAuthenticated: boolean
}
type PropsOfUser = User[keyof User] // string | boolean
let propOfUser: PropsOfUser
// @ts-ignore
propOfuser = 5
// @ts-ignore
propOfuser = Array<number>()
})
expect(diagnostics.length).toBe(2)
})
A função diagnose()
é similar à infer()
, mas retorna uma lista de erros ao invés de lançar uma exceção.