Back to Blog

Различия type ΠΈ interface Π² TypeScript

Anastasiia Berest 3 min read

🟒 ΠžΠ±Ρ‰Π΅Π΅

Оба ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для описания структуры ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, массивов, союзов, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅:

type User = {
 name: string;
 age: number;
};


interface IUser {
 name: string;
 age: number;
}

βœ… Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅

interface Animal {
 name: string;
}


interface Dog extends Animal {
 bark(): void;
}


// type
type AnimalType = {
 name: string;
};


type DogType = AnimalType & {
bark(): void;
};

βœ… ОбъСдинСниС (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для interface)

Π’Π°ΠΊΠΎΠ΅ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с type, Π±ΡƒΠ΄Π΅Ρ‚ ошибка Duplicate identifier.

interface User {
 name: string;
}


interface User {
 age: number;
}


// Π˜Ρ‚ΠΎΠ³:
const user: User = {
 name: "Tom",
 age: 30,
};

βœ… ОбъСдинСния ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ type)

type Status = "success" | "error"; // union

type Point = [number, number]; // tuple

🧠 Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ interface, Ссли ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΡˆΡŒ структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ класса.

β€’ Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ type, Ссли:

- Π½ΡƒΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ объСдинСния (|)

- Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ пСрСсСчСния (&)

- ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅ΡˆΡŒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, массивы, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ

Anastasiia Berest

Anastasiia Berest

Senior Web UI Engineer

I'm a web development passionate about creating meaningful digital experiences.