Åsidosätt typ som tillhandahålls av TypeScript-bibliotek i ett namnrymd?
Finns det något sätt att åsidosätta värdet av en typ som exporteras och används av ett TypeScript-paket?
Så jag har detta i min typings-fil:
// index.d.ts
declare module 'my-package' {
namespace DependencyInjection {
type ServiceID = 'myServiceOne' | 'myServiceTwo'; // original type is "any";
}
}
och jag får följande fel:
Duplicate identifier 'ServiceID'.ts(2300)
inject.ts(44, 10): 'ServiceID' was also declared here.
Jag skulle vilja kunna byta typen av ServiceID från den konsumerande koden. Kan det göras? Jag vet att gränssnitt kan utvidgas men jag har inte hittat ett sätt att ändra eller uppdatera en typ.
Sammanhang
Jag skriver ett TypeScript-paket och jag skulle vilja att användare kan åsidosätta vissa standardtyper med sina egna när de integrerar paketet, istället för att behöva ange generics varje gång de använder vissa metoder.
Svar #1
Modulförstärkning fungerar endast om modulen kan utökas. Typer kan inte utökas, men gränssnitt kan.
declare module 'my-package' {
namespace DependencyInjection {
interface ServiceIDMap {}
type ServiceID = keyof ServiceIDMap
}
}
declare module 'my-package' {
namespace DependencyInjection {
// insert your keys in here.
interface ServiceIDMap {
myServiceOne: unknown
mySevriceTwo: unknown
}
}
}
Lekplats
@types/jest är också utformat för att göra detta, med ts-jest som utökar Config.InitialOptions.globals-strukturen.
