mongoose - Typescript velger ikke riktig overbelastning
- typescript-versjon: 2.1.4
- @types/mongoose versjon: 4.7.1
Jeg bruker mongoose sine typer:
post<T extends Document>(method: string, fn: (
error: mongodb.MongoError, doc: T, next: (err?: NativeError) => void
) => void): this;
post<T extends Document>(method: string, fn: (
doc: T, next: (err?: NativeError) => void
) => void): this;
i koden min:
function (schema: Schema) {
schema.post('remove', function (doc, next) { });
}
Det velger alltid først post definert, doc vil være mongodb.MongoError, next vil være T.
Gikk jeg glipp av noe? Og hvordan får man det til å velge andre post definisjon?
Svar #1
TypeScript velger alltid den første overloaden som samsvarer med de spesifiserte parameterne. Fordi funksjonsargumenter kan bli ignorert av kalleren, betyr dette at funksjoner som aksepterer callbacks med høyere aritet bør komme etter callbacks med lavere aritet.
Den andre overbelastningen er mer spesifikk (den kan håndtere en funksjon med lavere total aritet enn den forrige overbelastningen), så den andre overbelastningen bør listes over den første i dette tilfellet.
TL;DR: .d.ts-filen har en feil, de to post-linjene bør byttes om.