Kurs Angular · Moduł 1: Wprowadzenie do Angulara

TypeScript dla Angulara - Kodeks Bushido Kodu

2 min czytania ·
W tej lekcji4

TypeScript to język, którego Angular wymaga do pracy. Jest jak kodeks Bushido - narzuca dyscyplinę, ale w zamian daje niezawodność i przewidywalność.

Dlaczego TypeScript?

TypeScript to JavaScript z typowaniem statycznym:

  • Wykrywa błędy przed uruchomieniem kodu
  • Lepsza autokompletacja w edytorze
  • Samodokumentujący się kod
  • Refaktoryzacja bez strachu

Podstawowe Typy

// Typy proste
const imie: string = 'Musashi';
const wiek: number = 25;
const czyAktywny: boolean = true;

// Tablice
const techniki: string[] = ['Kendo', 'Iaido', 'Judo'];
const poziomy: Array<number> = [1, 2, 3, 4, 5];

// Obiekty z interfejsem
interface Samuraj {
  imie: string;
  klan: string;
  poziom: number;
  techniki?: string[]; // ? oznacza opcjonalne
}

const wojownik: Samuraj = {
  imie: 'Miyamoto Musashi',
  klan: 'Niten Ichi-ryū',
  poziom: 10
};

Typy w Angularze

Typowanie komponentów

import { Component, Input, Output, EventEmitter } from '@angular/core';

interface Zadanie {
  id: number;
  nazwa: string;
  ukonczone: boolean;
}

@Component({
  selector: 'app-lista-zadan',
  standalone: true,
  template: `
    @for (zadanie of zadania; track zadanie.id) {
      <div (click)="wybierz(zadanie)">
        {{ zadanie.nazwa }}
      </div>
    }
  `
})
export class ListaZadanComponent {
  @Input() zadania: Zadanie[] = [];
  @Output() wybranoZadanie = new EventEmitter<Zadanie>();

  wybierz(zadanie: Zadanie): void {
    this.wybranoZadanie.emit(zadanie);
  }
}

Typowanie serwisów

import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';

interface Samurai {
  id: number;
  name: string;
  rank: string;
}

@Injectable({
  providedIn: 'root'
})
export class SamuraiService {
  private samuraje: Samurai[] = [
    { id: 1, name: 'Musashi', rank: 'Master' },
    { id: 2, name: 'Kojiro', rank: 'Expert' }
  ];

  getSamuraje(): Observable<Samurai[]> {
    return of(this.samuraje);
  }

  getSamurajById(id: number): Observable<Samurai | undefined> {
    return of(this.samuraje.find(s => s.id === id));
  }
}

Strict Mode - Najwyższy Poziom Dyscypliny

W tsconfig.json Angular domyślnie włącza strict mode:

{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true,
    "strictNullChecks": true,
    "strictPropertyInitialization": true
  }
}

To jak trening u najsurowszego mistrza - wymagający, ale kształtujący najlepszych wojowników kodu!

Hasła z dokumentacji w tej lekcji

Widzisz błąd w tej lekcji?

Sprawdź się

Odpowiedz na pytania z tej lekcji. Wybierz odpowiedź, a od razu zobaczysz, czy jest poprawna.

  1. 1. Dlaczego Angular wymaga TypeScript?

  2. 2. Co oznacza znak zapytania (?) przy nazwie pola w interfejsie TypeScript, np. 'techniki?: string[]'?

  3. 3. Jak poprawnie zadeklarować tablicę tekstów (stringów) w TypeScript?

Zadania praktyczne w grze

  • Układanie w poziomie

    Ułóż w jednej linii poprawną deklarację zmiennej z typem string:

  • Układanie w pionie

    Uporządkuj linie definicji interfejsu TypeScript (od góry do dołu):

  • Klikanie w kolejności

    Kliknij po kolei, aby zbudować pole interfejsu z typem: poziom: number;

Przydatne artykuły