Ha senso usare "export" all'interno di un file "d.ts"?
Sto cercando di creare un file per i tipi utilizzati globalmente nella mia app.
reduxState.d.ts
declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}
 
    Con il codice sopra, posso già vedere i miei namespacee i suoi membri disponibili nei miei file di progetto.
Allora qual è la differenza tra il codice sopra e il codice seguente, che utilizza exportper i namespacemembri?
declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}
 
    Entrambi sembrano funzionare bene. Qual è la differenza?
A partire dal: https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing
Poiché vogliamo che le interfacce e le classi qui siano visibili al di fuori dello spazio dei nomi, le anteponiamo con export.
In questo estratto dal DOC, sembra che si riferiscano a un file namespacedichiarato all'interno di tsun d.tsfile e non . È per questo che ti serve exportin quel caso?
Ha senso utilizzare exportall'interno di un d.tsfile?
Risposte
*.d.tsi file sono per definizione, vengono completamente ignorati in fase di esecuzione. Se scrivi codice JS perché hai una libreria o qualcosa del genere, ti consiglio vivamente di utilizzare la parola chiave export, perché questo rende molto più facile per gli altri utenti vedere cosa saranno in grado di usare dal tuo codice (qualcosa che non export, ovviamente non può essere importato altrove).
Ora il tuo caso d'uso: tutto ciò che viene esportato da un namepsace, può essere utilizzato al di fuori di indipendentemente. Significa che potresti fare qualcosa di simile
const obj: MyProject.SomeInterface = { someProperty: 20 };
 
     Dato che stai usando *.d.tsfile e non *.tsfile, non farà alcuna differenza per te fintanto che esporti solo interfacce, dal momento che verrebbero comunque omesse in fase di compilazione.
Un'ultima nota: i *.d.tsfile ti consentono di vedere le tue cose nell'intero progetto, ma se prevedi di importare funzioni o simili da lì, devi prima importarle ovviamente.