Eksporter og publiser alle typer og grensesnitt i Typescript


Jeg prøver å publisere et TypeScript-bibliotek. Det er ikke klart for meg hvordan jeg skal eksponere alle typene og grensesnittene. Her er oppsettet mitt:

mylib
  ├──src
  │  ├──types
  |  |  └──mytypes.ts
  │  └──index.ts
  ├──package.json
  └──tsconfig.json
//index.ts

import {MyInterface} from './types/mytypes.ts';

const my_main_name = {
  myfunc: function(param1:MyInterface):void{
    console.log(param1.a);
  }
}

//mytypes.ts

export interface MyInterface {
  a:string
}

Jeg genererer deklarasjonsfiler ved å sette tsconfig.json-parameteren "declaration":"true".

Nå vil jeg bruke disse bibliotekene som avhengighet for et annet.

mylib
yrlib
  ├──src
  │  └──index.ts
  ├──package.json
  └──tsconfig.json
//yrlib/package.json
{
 ...
 "dependencies":{
    "mylib":"file:../mylib/"
  }
}

//yrlib/src/index.ts

import * as mylib from 'mylib';

let a:mylib.MyInterface = ...
      // ~~ Namespace has no export member for MyInterface

Jeg får fullføring for mylib fordi det er eksportert.

Spørsmålet mitt er hvordan jeg kan se alle typene og grensesnittene til mylib-modulen inne i yrlib?

Siden de kan være hundrevis og i alle forskjellige filer og mapper.

Bør jeg eksportere dem alle én etter én? Hva er beste praksis? Finnes det en måte å eksportere alle typer på en gang?

Og hvordan "typying":"dist/index.d.ts" i package.json passer inn i alt dette? Skal alle typene være i én fil? Hvorfor genererer ikke Typescript denne filen?

Bør jeg bruke et navnrom som inneholder alt? Jeg kan ikke finne en fullstendig forklaring på dette emnet.

Svar #1

Jeg møtte nylig det samme problemet, og den eneste måten jeg fant for å publisere din Type-Space-kode (f.eks.: typer, grensesnitt) sammen med din Value-Space-kode (f.eks.: funksjoner, klasser, variabler) er å eksportere et namespace som inneholder alt.

En annen merkelig ting er at for å eksportere noe importert til et namespace, er syntaksen:

import * as mymod from './mymod';
import * as mytypes from './mytypes';

export namespace mylib {
  export import mod = mymod;
  export import types = mytypes;
}

Med export import-syntaksen.

Dessverre vil dette i min ESLinter resultere i en advarsel/feil siden det tilsynelatende tolker mod og types som unused-vars.

Jeg forstår ikke hvorfor det ikke finnes en fullstendig forklaring på dette emnet i dokumentasjonen.

Relaterte artikler