modul - Typescript tilpasset typedefinisjon bryter ved import av klasse
Jeg har en egendefinert typedefinisjon for å utvide et eksisterende grensesnitt (Express Request som vist her). Innholdet i express.d.ts:
declare namespace Express {
export interface Request {
name: string
}
}
Fungerer fint. Men i stedet for at name er en streng, trenger jeg nå at det er en egendefinert klasse MyClass. Klasse definisjonen ser slik ut:
export class MyClass {
first: string;
last: string;
}
Jeg endrer grensesnittforsterkningen til:
import { MyClass } from "../routes/myClass";
declare namespace Express {
export interface Request {
name: MyClass
}
}
Nå får jeg følgende feil når jeg prøver å få tilgang til req.name:
error TS2339: Property 'name' does not exist on type 'Request'.
Jeg har funnet ut at min express.d.ts effektivt blir et «modul» på grunn av den tilleggte import-setningen. Likevel er det ikke klart for meg hvordan jeg kan overvinne problemet mitt.
Svar #1
Som @unional nevnte i kommentaren, når du har toppnivå-import eller -eksport i en fil, blir toppnivå-omfanget i filen et modulomfang, atskilt fra globalt omfang.
For å endre global deklarasjon i en modul, må du bruke declare global for å referere til Express i det globale navnerommet:
import { MyClass } from "../routes/myClass";
declare global {
namespace Express {
export interface Request {
name: MyClass
}
}
}
