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

Relaterte artikler