javascript - Exportera en samling funktioner i Typescript


Jag är ny på Typescript och jag har spenderat ett tag på att söka upp olika metoder för att göra detta, men jag sitter fast.

Jag vill skapa en biblioteksfil som bara innehåller en samling orelaterade funktioner som jag kan importera var som helst. I vanlig Javascript kan jag bara göra något liknande detta:

let libraryFunctions = {};
libraryFunctions.a = () => {
  return true;
}
module.exports = libraryFunctions;

Men i Typescript får jag bara ett felmeddelande som säger Property 'a' does not exist on type {}. Jag såg då att jag kunde göra något liknande detta:

interface ILibraryFunctions {
  a(): boolean;
};

export class LibraryFunctions implements ILibraryFunctions {
  a = () => {
    return false;
  }
}

Men att skapa en klass verkar vara för mycket (om inte min förståelse av Typescripts klass är fel). Skulle någon kunna peka mig i rätt riktning?

Tack!

Svar #1

I TypeScript exporterar du bara vad du vill, på samma sätt som ES2015-moduler (som också implementeras av Babel):

export function a() {
  return true;
}

// or alternatively

export const b = () => false

Sedan, i en annan fil

import {a, b} from './thatFirstFile';
// or
import * as libraryFunctions from './thatFirstFile';

När det gäller ditt specifika scenario behöver du inte implementera en klass:

interface ILibraryFunctions {
  a(): boolean;
};

const myLib: ILibraryFunctions = {
  a() { return true; }
};

export default myLib;

Det sagt, den metod som nämns högst upp i svaret är att föredra, från Daniels kommentar nedan:

I praktiken skulle du inte export default ett objekt med a, du skulle direkt default-exportera a självt. Det sagt, en anledning till att du inte skulle göra som det skrevs är att befintliga verktyg lättare kan tree-shaka från top-nivå-exporter, men inte från ett faktiskt objekt. Dessutom tillåter användning av den första syntaxen att du kan använda ES2015:s namngivna import-syntax när du har mer än en export.