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.
