typescript - Utvid en Tyyperklæring fra et bibliotek
Jeg har importert et bibliotek mycoollib som ligger i node_modules og har følgende mappe- og filstruktur
node_modules
- mycoollib
- src
mycoollogic.js
- types
index.d.ts
index.d.ts, som inneholder typdefinisjonene for mycoollib, er dette
/// <reference types="node" />
export type MyCoolType = {
func1: () => void
func2: () => void
}
I søknaden min trenger jeg å utvide MyCoolType-typedefinisjonen, og legge til for eksempel en tredje funksjon. Så jeg lager en my-cool-type-augmentation.d.ts-fil i src
declare namespace mycoollib {
export type MyCoolType = {
augmentedFunction: () => void
}
}
men denne løsningen ser ikke ut til å fungere, siden kompilatoren gir en feil når jeg prøver å bruke augmentedFunction på objekter av typen MyCoolType.
Jeg har også prøvd å bruke moduldeklarasjonen, som dette
declare module "mycoollib" {
export type MyCoolType = {
augmentedFunction: () => void
}
}
men i dette tilfellet signaliserer kompilatoren at det er en Duplikatidentifikator 'MyCoolType'-feil i index.d.ts og i my-cool-type-augmentation.d.ts. Denne løsningen fungerer for meg i andre tilfeller der jeg må utvide interfaces, men ser ikke ut til å fungere med types.
Svar #1
Det fungerer ikke fordi det ikke skal fungere i henhold til dokumentasjonen:
... den viktigste forskjellen er at en type ikke kan åpnes på nytt for å legge til nye egenskaper, i motsetning til et grensesnitt som alltid kan utvides.
Forskjeller mellom typealias og grensesnitt