Det enklaste sättet att ange en typ i TypeScript är med ett kolon (:) efter variabelnamnet
let name: string = "Anna";
let age: number = 25;
let isStudent: boolean = true;
let lista: number[] = [1, 2, 3]; // Lista med nummer
let anything: any = "vad som helst"; // Vilken typ som helst (undvik!)
För funktioner
// Ange typ för parametrar och returvärde
function add(a: number, b: number): number {
return a + b;
}
function greet(name: string): void { // void = returnerar inget
console.log("Hej " + name);
}
let name = "Anna"; // TypeScript vet att detta är en string
let age = 25; // TypeScript vet att detta är en number
// Men för funktionsparametrar MÅSTE du ange typen:
function greet(name: string) { // Måste skriva ': string'
console.log("Hej " + name);
}
Kan användas när man konverterar JS till TS, men undvikas till slutproduktion
En TS variabel "föds" när den får en type, tills dess är den av typ any
I motsats finns never och unknown (vi kommer till det längre fram i kursen)
const car: {
make: string
model: string
year: number
}
car = { make: 'Volvo', model: 'V70', year: 2011 }
function printCar(car: {
make: string
model: string
year: number
}) {
console.log(`${car.make} ${car.model} (${car.year})`)
}
Jobbigt att skriva varje gång
Att typa arrayer kan göras med [] eller Array<typ>. Den senare varianten kallas generics och vi återkommer om det (Reactkursen)
const names: string[] = ["Olle", "Kalle", "Nisse"]
names.push("Harlald")
const fruits: Array<string> = ["apple", "banana", "orange"]
fruits.push("pear")Med hjälp av Typescript kan vi specifiera hur vi vill att exempelvis ett objekt ska se ut genom att använda oss av type eller interface (vi går in på skillnader senare i kursen)
Man kan specifiera vilka properties som accepteras, ex nummer eller string, etc
type Car = {
make: string
model: string
year: number
color?: string
}
const car = { make: 'Volvo', model: 'V70', year: 2011 }
function printCar(car: Car) {
console.log(`${car.make} ${car.model} (${car.year})`)
}
interface Car {
make: string
model: string
year: number
color?: string
}
const car = { make: 'Volvo', model: 'V70', year: 2011 }
function printCar(car: Car) {
console.log(`${car.make} ${car.model} (${car.year})`)
}
Klassisk setteori: OR eller AND. Antingen en frukt eller något surt.
Union types kan beskrivas i Typescript med | (pipe-operator). Den associerade typen kan vara av en eller flera andra typer.
function flipCoin(): "heads" | "tails" {
if (Math.random() > 0.5) return "heads"
return "tails"
}
const outcome = flipCoin()// Funktionen tar inte antingen en sträng ELLER ett nummer
function displayMessage(message: string | number): void {
if (typeof message === "string") {
console.log(`Message: ${message}`);
} else {
console.log(`Message as a number: ${message}`);
}
}
displayMessage("Hello, TypeScript!");
displayMessage(133); # PRESENTING CODE
Klassisk setteori: OR eller AND
Intersection types kan beskrivas i Typescript med & (ampersand-operator)
En type som kombinerar en eller flera typer
// Definerar en User type
type User = {
id: number;
username: string;
};
// Definierar en Role type
type Role = {
role: string;
permissions: string[];
};
// Skapar en typ som kombinerar både User och Role (intersection)
type UserProfile = User & Role;
// Skapar en användarprofil objekt av type UserProfile
const userProfile: UserProfile = {
id: 1,
username: "john doe",
role: "admin",
permissions: ["read", "write", "delete"],
};
// Få tag i properties av objektet userProfile
console.log(`User ID: ${userProfile.id}`);
console.log(`Username: ${userProfile.username}`);
console.log(`Role: ${userProfile.role}`);
console.log(`Permissions: ${userProfile.permissions.join(", ")}`);
type Shape = Shape2D & Shape3D;
let shape: Shape= {
shape: 'Square',
color: 'Red',
noEdges: 4,
volume: 0
};