node.js - Deklarer Chai egendefinert plugin som en NodeJS global variabel i TypeScript
Her er mitt forrige spørsmål
TL;DR: Jeg prøver å deklarere typer for mine globale NodeJS-variabler (som jeg setter opp i before-hooken), slik at TypeScript kan gjenkjenne det.
Min wdio.conf:
...
let chai = require('chai');
let { customAssert } = require('../helpers/customAssert');
...
before: async function (capabilities, specs) {
// I have accomplished to declare types for this variables thanks to the answer in the previous question
global.foo = "bar"
global.expect= chai.expect;
global.helpers = require("../helpers/helpers");
// ... etc.
// ... etc.
// However I'm stuck with this:
chai.use(customAssert);
global.customAssert = chai.customAssert;
},
Fordi customAssert er min egen plugin, må jeg "legge til" den i Chai med use. Etter dette kan jeg bruke min egendefinerte assert-logikk slik: chai.customAssert.
Selvfølgelig vil jeg ikke importere begge modulene i hver test og "plugge inn" min tilpassede assert hver gang. Det er grunnen til at jeg erklærer den i det globale omfanget.
Jeg har imidlertid ingen anelse om hvordan jeg skal overbevise TypeScript om at customAssert kan være en del av chai etter at jeg vil koble det til med chai.use
global.d.ts
import chai from "chai";
import customAssert from "../helpers/customAssert"
declare global {
const foo: string;
const expect: typeof chai.expect;
const helpers: typeof import("../helpers/helpers");
const customAssert: typeof chai.customAssert // Property 'customAssert' does not exist on type 'ChaiStatic'. Duh...
namespace NodeJS {
interface Global {
foo: typeof foo;
expect: typeof expect;
helpers: typeof helpers;
customAssert: typeof customAssert; // Will not work but let it be
}
}
}
Property 'customAssert' finnes ikke på typen 'ChaiStatic' fordi jeg må legge til pluginen min i Chai med chai.use først.
Jeg kan imidlertid ikke gjøre dette i global.d.ts fordi Utsagn er ikke tillatt i ambiente kontekster.
Hvordan deklarerer jeg en type for NodeJS-globalvariabelen som kun vil eksistere i omfanget til chai etter at jeg kobler den inn?
Svar #1
I roten av typene dine, opprett denne mappestrukturen
.
└── chai/
└── index.d.ts
index.d.ts
declare module Chai {
interface ChaiStatic {
customAssert: any;
}
}
