# Classes in TypeScript — TypeScript

Source: https://www.geekswithgeeks.com/en/typescript/ts-classes-basics

> Typed properties, constructors, and interfaces a class must satisfy.

## A typed class

Declare each property's type, then assign values in the constructor.

```typescript
class Dog {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  bark(): string {
    return `${this.name} says Woof!`;
  }
}

const rex = new Dog("Rex", 3);
```

## Implementing an interface

`implements` makes TS check that the class actually provides everything the interface promises.

```typescript
interface Speaker {
  speak(): string;
}

class Cat implements Speaker {
  speak(): string {
    return "Meow!";
  }
}
// If speak() were missing:
// Error: Class 'Cat' incorrectly implements interface 'Speaker'.
```

## Classes are structural too

A class doesn't need `implements` to satisfy an interface — if its shape matches, TS accepts it anywhere that interface is expected.
