Ich verwende Ava (kein Link, da ich nicht mehr als 2 verwenden darf) zum Testen und möchte den Testkontext von Ava eingeben. Es ist typed as any
in ava's definition file.Nachfolgende Variablendeklarationen müssen denselben Typ haben. any
Was ich speziell will, ist, dass das Typoskript Compiler weiß, dass t.context
vom Typ {foo: number}
im folgenden Test:
import test from 'ava'
test.beforeEach((t) => {
t.context = { foo: 5 }
})
test('Is context typed', (t) => {
// uncaught typo
t.is(t.context.fooo, 5)
})
Ich versuchte declaration merging zu verwenden, um dies zu tun, aber es funktioniert nicht mit TS2403: Subsequent variable declarations must have the same type. Variable 'context' must be of type 'any', but here has type '{ foo: number; }'.
:
declare module 'ava' {
interface ContextualTestContext {
context: {
foo: number,
}
}
}
test.beforeEach((t) => {
t.context = { foo: 5 }
})
test('Is context typed', (t) => {
// uncaught ypo
t.is(t.context.fooo, 5)
})
gibt es eine Möglichkeit, dies zu tun, ohne den Kontext wie so die ganze Zeit zu Gießen:
interface IMyContext {
foo: number
}
test.beforeEach((t) => {
t.context = { foo: 5 }
})
test('Is context typed', (t) => {
const context = <IMyContext> t.context
// caught typo
t.is(context.fooo, 5)
})
@despairblue könnten Sie ein Problem für Ihren Anwendungsfall auslösen? Vielleicht können wir ein Generikum in der 'test()' Signatur akzeptieren. –
@MarkWubben Danke, ich öffnete es hier https://github.com/avajs/ava/issues/1291 – despairblue
@FinnO, das technisch funktioniert, aber wenn ich die Funktionen verwenden will, die auf der 'Test'-Funktion selbst definiert sind (wie' test.beforeEach') Ich müsste alle Deklarationen neu definieren. Es gibt ungefähr 1700 von ihnen. – despairblue