Moduler i TypeScript

Moduler i TypeScript

Denne artikkelen forklarer moduler i TypeScript.

YouTube Video

Moduler i TypeScript

Moduler i TypeScript er en viktig funksjon for å forbedre gjenbrukbarhet og vedlikeholdbarhet for kode. Som JavaScript er TypeScript også basert på ECMAScript 2015 (ES6)-modulsystemet, men en viktig funksjon er evnen til å utnytte TypeScripts typesystem.

Hva er moduler?

En modul er et system for å gruppere relatert kode i en enkelt enhet som kan importeres og gjenbrukes i andre filer. I TypeScript opprettes et omfang per fil for å kapsle inn koden, slik at det forhindres at den påvirker andre filer. Dette hjelper til med å unngå kodekollisjoner og gjør vedlikehold enklere.

Interne og eksterne moduler

  • Interne moduler (navnerom): En moduldefineringsmetode brukt i TypeScript 1.5 og tidligere, anbefales ikke lenger. Det behandles nå som et 'navnerom'.
  • Eksterne moduler: Den nåværende standarden, basert på ES6-modulsystemet. Denne delen forklarer hovedsakelig eksterne moduler.

Hvordan eksportere moduler

Når man lager moduler, er det nødvendig å eksportere for å gi tilgang fra utsiden. I TypeScript kan du eksportere verdier, funksjoner, klasser osv. ved å bruke nøkkelordet export. Det finnes hovedsakelig to typer eksport.

Navngitte eksporter

Brukes for å lage flere eksporter, slik at importen kan velge og bruke spesifikke.

 1// mathUtils.ts
 2export const pi: number = 3.14159;
 3
 4export function add(x: number, y: number): number {
 5    return x + y;
 6}
 7
 8export function subtract(x: number, y: number): number {
 9    return x - y;
10}

Standardeksporter

Brukes når du vil at hele modulen skal ha en enkelt standardeksport. Standardeksporter eksporteres uten et navn, som lar importen motta dem med hvilket som helst navn.

 1// calculator.ts
 2export default class Calculator {
 3    add(x: number, y: number): number {
 4        return x + y;
 5    }
 6
 7    subtract(x: number, y: number): number {
 8        return x - y;
 9    }
10}

Hvordan importere moduler

For å bruke moduler importerer du verdier, funksjoner, klasser osv. fra modulen ved hjelp av nøkkelordet import.

Navngitte importer

Når du importerer spesifikke elementer fra en navngitt eksport, bruker du krøllparenteser {}.

1// main.ts
2import { pi, add, subtract } from './mathUtils';
3
4console.log(`Value of pi: ${pi}`);
5console.log(`Addition: ${add(10, 5)}`);
6console.log(`Subtraction: ${subtract(10, 5)}`);

Standardimporter

Når du importerer en standardeksport, kan du bruke hvilket som helst navn.

1// main.ts
2import Calculator from './calculator';
3
4const calculator = new Calculator();
5console.log(`Addition: ${calculator.add(10, 5)}`);
6console.log(`Subtraction: ${calculator.subtract(10, 5)}`);

Importaliaser

For å unngå navnekonflikter eller forkorte lange navn, kan du importere med et alias.

1// main.ts
2import { add as addition, subtract as subtraction } from './mathUtils';
3
4console.log(`Addition: ${addition(10, 5)}`);
5console.log(`Subtraction: ${subtraction(10, 5)}`);

Forskjellen mellom moduler og navneområder

Et navneområde (namespace) er en intern modulstruktur som ble brukt i tidlige versjoner av TypeScript for å gruppere kode sammen. Imidlertid anbefales nå ES6-moduler, og navneområder er sjelden nødvendige.

Navneområder kan defineres i samme fil eller på tvers av flere filer, og fordi de kan utvides globalt, kan administrering av avhengigheter bli vanskelig. Derimot har moduler separate områder per fil og klare avhengigheter, noe som gjør dem til en mer moderne og sikker metode.

 1// Example of a namespace
 2namespace Geometry {
 3    export function calculateArea(radius: number): number {
 4        return Math.PI * radius * radius;
 5    }
 6}
 7
 8// Can be used directly without importing the module (not recommended)
 9const area: number = Geometry.calculateArea(5);
10console.log(`Area: ${area}`);

TypeScript Moduloppløsning

I TypeScript finnes det to strategier for moduloppløsning.

  • Node Moduloppløsning: Standardmetoden for oppløsning brukes i Node.js-miljøer og finner moduler ved å søke i node_modules-mappen.
  • Klassisk Moduloppløsning: TypeScripts egen oppløsningsmetode som gir mer fleksible søk, men brukes sjelden i dag.

Vanligvis brukes Node moduloppløsning, og det er aktivert som standard med mindre det spesifiseres noe annet i konfigurasjonsfilen.

Praktisk eksempel

Til slutt vises et eksempel på implementering og gjenbruk av beregningsfunksjoner ved bruk av moduler.

mathUtils.ts

 1export const pi: number = 3.14159;
 2
 3export function multiply(x: number, y: number): number {
 4    return x * y;
 5}
 6
 7export function divide(x: number, y: number): number {
 8    if (y === 0) {
 9        throw new Error("Cannot divide by zero");
10    }
11    return x / y;
12}

calculator.ts

 1import { multiply, divide } from './mathUtils';
 2
 3export default class Calculator {
 4    multiplyNumbers(x: number, y: number): number {
 5        return multiply(x, y);
 6    }
 7
 8    divideNumbers(x: number, y: number): number {
 9        return divide(x, y);
10    }
11}

main.ts

1import Calculator from './calculator';
2
3const calculator = new Calculator();
4
5const result1: number = calculator.multiplyNumbers(10, 5);
6console.log(`Multiplication: ${result1}`);
7
8const result2: number = calculator.divideNumbers(10, 2);
9console.log(`Division: ${result2}`);

Sammendrag

TypeScript-modulsystemet er et kraftig verktøy for å organisere kode, øke gjenbrukbarhet og forbedre vedlikeholdbarhet. Bruk av eksterne moduler basert på ES6-moduler anbefales, og bruk av nøkkelordene export og import gjør det enkelt å eksportere og importere moduler.

Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.

YouTube Video