Esporta e pubblica tutti i tipi e le interfacce in Typescript
Sto cercando di pubblicare una libreria di dattiloscritti. Non mi è chiaro come esporre tutti i tipi e le interfacce. Ecco la mia configurazione:
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
}
Sto generando file di dichiarazione impostando tsconfig.jsonparam "declaration":"true".
Ora voglio usare queste librerie come dipendenza di un'altra.
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
Ottengo il completamento automatico per mylibperché viene esportato.
La mia domanda è come posso vedere tutti i tipi e le interfacce del mylibmodulo all'interno yrlib?
Dal momento che possono essere centinaia e in tutti i diversi file e cartelle.
Devo esportarli tutti uno per uno? Qual è la migliore pratica? C'è un modo per esportare tutti i tipi contemporaneamente?
E come "typying":"dist/index.d.ts"in package.jsonsi inserisce in tutto questo? Dovrebbero essere tutti i tipi in un file? Perché Typescript non genera questo file?
Dovrei usare uno spazio dei nomi che contenga tutto? Non riesco a trovare una spiegazione completa su questo argomento.
Risposte
Recentemente ho affrontato lo stesso problema e l'unico modo che ho trovato per pubblicare il tuo codice Type-Space (es: tipi, interfacce) insieme al tuo codice Value-Space (es: funzione, classi, variabili) è esportare un namespaceche contiene qualunque cosa.
Un'altra cosa strana è che per esportare in namespacequalcosa di importato, la sintassi è:
import * as mymod from './mymod';
import * as mytypes from './mytypes';
export namespace mylib {
export import mod = mymod;
export import types = mytypes;
}
Con la export importsintassi.
Sfortunatamente questo nel mio eslinter si risolverà in un avviso / errore poiché apparentemente legge mode typescome unused-vars.
Non capisco perché non c'è una spiegazione completa per questo argomento nella documentazione.