FJS26 · V49 · TISDAG

Introduktion
till TypeScript

Flytta felen från när koden körs till när du skriver den.

Chas Academy · Tisdag 1 december 2026


Idag

01Varför TypeScript?02Ett TypeScript-projekt03Grundtyper04Arrayer och funktioner05Objekt: type och interface06Efter passet
INTRODUKTION TILL TYPESCRIPT2 / 26
01

Varför
TypeScript?

VARFÖR?


Dynamisk och statisk typning

JavaScript: dynamisk

Värdet får sin typ när koden körs. '10' är en sträng och 10 är ett tal, och en variabel kan byta typ när som helst.

let price = 39;
price = 'gratis'; // inga problem

TypeScript: statisk

Typen bestäms när koden skrivs, och kontrolleras innan den körs.

let price = 39;
price = 'gratis';
// Type 'string' is not assignable
// to type 'number'.
INTRODUKTION TILL TYPESCRIPT4 / 26

TypeScript

JavaScript med typer. Ett språk som kompileras till vanlig JavaScript, och som webbläsaren aldrig ser.

  • Open source, utvecklat av Microsoft sedan 2012.
  • Ett superset: all JavaScript är giltig TypeScript. Du lägger till typer där du vill.
  • Typerna försvinner när koden byggs. Det som körs är JavaScript.
INTRODUKTION TILL TYPESCRIPT5 / 26

VARFÖR?


Tre buggar JavaScript släpper igenom

Alla tre körs utan varning i JavaScript. TypeScript säger ifrån innan du har sparat filen.

Sträng från ett formulär

const quantity = input.value; // '2'
const total = quantity * 39;

Stavfel

product.prise;
// undefined, utan fel

Fel typ in

formatPrice('39');
// TypeError: price.toFixed
// is not a function
INTRODUKTION TILL TYPESCRIPT6 / 26

VARFÖR?


Vad du vinner

Felen kommer tidigare

Från när användaren kör appen till när du skriver koden. undefined upptäcks i editorn, inte i produktion.

Editorn hjälper dig

Autocomplete som vet vilka egenskaper som finns, och röda streck direkt när något är fel.

Koden dokumenterar sig själv

add(a: number, b: number): number säger vad funktionen tar och ger, utan att du läser koden.

INTRODUKTION TILL TYPESCRIPT7 / 26

VARFÖR?


Och vad det kostar

Mer att skriva

Typer för parametrar, objekt och data utifrån. Men TypeScript räknar ut mycket själv.

Ett steg till

Koden måste kontrolleras och byggas. Med Vite märks det knappt.

Ingen garanti när koden körs

Typerna finns bara medan du skriver. Data från ett API kan fortfarande vara fel. Det tar vi i morgon och nästa vecka.

INTRODUKTION TILL TYPESCRIPT8 / 26
02

Ett TypeScript-
projekt

PROJEKTET


Samma Vite som förra veckan

Mallen vanilla-ts i stället för vanilla.

  • npm create vite@latest mitt-projekt -- --template vanilla-ts
  • npm install -D typescript@~6.0.3: Vite installerar TypeScript 7, men typescript-eslint stöder än så länge bara upp till 6.0.
  • npm install -D eslint @eslint/js typescript-eslint
  • Utan den andra raden får du ERESOLVE could not resolve på den tredje. Använd inte --force.
INTRODUKTION TILL TYPESCRIPT10 / 26

PROJEKTET


Vem gör vad?

tsc

TypeScript-kompilatorn. Kontrollerar typerna. I Vite-mallen bygger den ingenting (noEmit).

Vite

Tar bort typerna och bygger JavaScript. npm run dev kontrollerar inga typer.

ESLint

Hittar dålig kod, till exempel any och oanvända variabler. Med typescript-eslint förstår den TypeScript.

INTRODUKTION TILL TYPESCRIPT11 / 26

PROJEKTET


tsconfig.json

Ett urval av det Vite-mallen ger.

tsconfig.json

{
  "compilerOptions": {
    "target": "es2023",
    "lib": ["ES2023", "DOM"],
    "moduleResolution": "bundler",
    "noEmit": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true
  },
  "include": ["src"]
}

Var är strict?

Det står ingenstans. Sedan TypeScript 6 är strict på som standard. Då kontrolleras bland annat null och undefined, och en parameter utan typ blir ett fel i stället för any.

INTRODUKTION TILL TYPESCRIPT12 / 26
03

Grundtyper

GRUNDTYPER


Inference och annotation

TypeScript räknar ut typen

const cafe = 'Kaféet'; // 'Kaféet'
let guests = 12;      // number

Du skriver typen

let rating: number;
const isOpen: boolean = true;
INTRODUKTION TILL TYPESCRIPT14 / 26

GRUNDTYPER


Typerna du använder mest

Primitiver

string   // 'hej', ''
number   // 0, 39, -4.5
boolean  // true, false

Inget värde

null
undefined

let note: string | null = null;

Stäng av

any
// allt är tillåtet,
// inget kontrolleras
INTRODUKTION TILL TYPESCRIPT15 / 26
”

any stänger av TypeScript. Det kompilerar, och sedan kraschar det ändå.

04

Arrayer och
funktioner

ARRAYER


Typade arrayer

Härledd

const prices = [39, 49, 29]; // number[]
prices.push('gratis');
// Argument of type 'string' is not
// assignable to parameter of type 'number'.

Tom array: skriv typen

const names: string[] = [];
names.push('Ada', 'Grace');
INTRODUKTION TILL TYPESCRIPT18 / 26

FUNKTIONER


Parametrar och returtyp

Parametrarna måste typas

const sum = (numbers: number[]): number =>
  numbers.reduce((total, n) => total + n, 0);

Returtypen kan du skriva

TypeScript räknar ut den, men skriver du den hamnar felet i funktionen och inte där den anropas.

const logPrice = (price: number): void => {
  console.log(price);
};
INTRODUKTION TILL TYPESCRIPT19 / 26

FUNKTIONER


Valfria parametrar och standardvärden

Valfri med ?

const greet = (name: string, greeting?: string) =>
  `${greeting ?? 'Hej'}, ${name}!`;
// greeting: string | undefined

Standardvärde

const greet = (name: string, greeting = 'Hej') =>
  `${greeting}, ${name}!`;
// greeting: string
INTRODUKTION TILL TYPESCRIPT20 / 26
05

Objekt: type
och interface

OBJEKT


Ge formen ett namn

type

type Product = {
  readonly id: string;
  name: string;
  price: number;
  category?: string;
};

Användningen

const bun: Product = {
  id: 'bulle',
  name: 'Kanelbulle',
  price: 35,
};
bun.id = 'bulle2';
// Cannot assign to 'id' because
// it is a read-only property.
INTRODUKTION TILL TYPESCRIPT22 / 26

OBJEKT


Samma sak med interface

interface och extends

interface Customer {
  name: string;
  email: string;
}

interface Member extends Customer {
  memberSince: number;
}

type eller interface?

För objekt gör de nästan samma sak. interface kan utökas med extends. type kan också beskriva unions, som vi tar i morgon. Välj ett och var konsekvent i projektet.

INTRODUKTION TILL TYPESCRIPT23 / 26

OBJEKT


Funktioner som tar emot objekt

Koden

const formatProduct = (product: Product): string =>
  `${product.name}: ${product.price} kr`;

En egenskap för mycket

formatProduct({ id: 'te', name: 'Te',
  price: 29, color: 'grön' });
// Object literal may only specify known
// properties, and 'color' does not exist
// in type 'Product'.
INTRODUKTION TILL TYPESCRIPT24 / 26
06

Efter passet

EFTER PASSET


Öva

  • Code-along: gör klart del 1–4 och extrauppgiften om strict.
  • Övningar: codington.io/typescript, de första modulerna.
  • Total TypeScript: Beginner's TypeScript, gratis interaktiva övningar.
  • I morgon: unions, narrowing och type guards.
INTRODUKTION TILL TYPESCRIPT26 / 26

Introduktion till TypeScript

By sandra-larsson

Introduktion till TypeScript

  • 2