typer - Hur man åsidosätter en funktionssignatur från ett externt bibliotek i TypeScript?
Är det möjligt att åsidosätta en funktionssignatur i ett externt paket med dina egna typer?
Säg att jag har ett externt paket som heter translationpackage och jag vill använda translate-funktionen i det.
Paketet definierar funktionen på följande sätt:
// original signature
function translate(key: string) : string;
Nu vill jag åsidosätta det så att det bara accepterar nycklarna 'foo' | 'bar'. Det skulle skrivas som i följande exempel om jag själv skulle implementera translate-funktionen.
// my own signature
function translate(key: 'foo' | 'bar'): string
Vad måste jag göra för att få Typescript att använda min egen signatur istället för den ursprungliga överallt där jag importerar translate?
import { translate } from 'translationpackage'
Redigera: Jag vet att d.ts-filer kan användas om den importerade modulen inte har egna typdefinitioner. Det verkar dock som att detta inte fungerar när jag försöker åsidosätta befintliga typer.
Följande kod är nästan vad jag letar efter, men TypeScript ignorerar den till förmån för de typer som följer med paketet.
declare module 'translationpackage' {
export function translate(key: 'foo' | 'bar'): string;
}
Svar #1
Du kommer att behöva implementera ett translate-wrapper själv som omsluter funktionen från translatepackage.
// my-translate.ts
import { translate } from 'translationpackage'
export const myTranslate = (key: 'foo' | 'bar'): string => translate(key)
// my-other-file.ts
import { myTranslate } from 'my-translate'
console.log(myTranslate('foo'))
