Nota del traduttore
Questa è la traduzione del file typescript.md. Qui c'è il link dove si confrontano le differenze tra commit di riferimento di questa traduzione e l'ultimo commit di AVA sul branch master (Se si clicca sul link, e non si vede il file typescript.md
nella lista dei file modificati, questa traduzione è aggiornata).
Traduzioni: Español, Français, Italiano, Русский, 简体中文
AVA è dotato nativamente con un file definitione TypeScript. Questo permette agli sviluppatori di utilizzare TypeScript per scrivere i test.
Come prima cosa installa il TypeScript (se è già installato, controlla che la versione sia 2.1 o successiva).
$ npm install --save-dev typescript
Crea un file tsconfig.json
. Questo file serve per le opzioni del compilatore richieste per la compilazione del progetto o dei file di test.
{
"compilerOptions": {
"module": "commonjs",
"target": "es2015"
}
}
Aggiungi uno script test
nel file package.json
. Questo servirà a compilare prima il progetto e poi eseguire AVA.
{
"scripts": {
"test": "tsc && ava"
}
}
Crea un file test.ts
.
import test from 'ava';
async function fn() {
return Promise.resolve('foo');
}
test(async (t) => {
t.is(await fn(), 'foo');
});
Attivare context
Il tipo predefinito di t.context
è any
. AVA espone un'interfaccia RegisterContextual<T>
da utilizzare per applicare il tipo specifico a t.context
. Questo può aiutare a rintracciare errori a tempo di compilazione:
import * as ava from 'ava';
function contextualize<T>(getContext: () => T): ava.RegisterContextual<T> {
ava.test.beforeEach(t => {
Object.assign(t.context, getContext());
});
return ava.test;
}
const test = contextualize(() => ({ foo: 'bar' }));
test.beforeEach(t => {
t.context.foo = 123; // error: Type '123' is not assignable to type 'string'
});
test.after.always.failing.cb.serial('very long chains are properly typed', t => {
t.context.fooo = 'a value'; // error: Property 'fooo' does not exist on type '{ foo: string }'
});
test('an actual test', t => {
t.deepEqual(t.context.foo.map(c => c), ['b', 'a', 'r']); // error: Property 'map' does not exist on type 'string'
});
$ npm test