Abstract classes, interfaces and types

Abstract classes

АбстрактныС классы ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ классы, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом abstract. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ абстрактного класса Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ нСльзя. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ абстрактныС классы ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ сущности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ воплощСния

Interfaces

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ опрСдСляСт свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ свойством interface.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π½ΠΎ ΠΈ классами. Для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ свойство implements. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ свойства Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… нСльзя ΠΌΠ΅Π½ΡΡ‚ΡŒ (опрСдСляСм свойства с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ свойства readonly)

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ интСрфСйса

TypeScript позволяСт Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π² интСрфСйс Π½ΠΎΠ²Ρ‹Π΅ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, просто объявив интСрфСйс с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Π² Π½Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ поля ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. НапримСр:

interface ICar {
   color: string
}
interface ICar {
   seats: number
}
let car: ICar = {
   color: "blue",
   seats: 4,
}

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ интСрфСйсов ΠΈ абстрактных классов

  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ). Абстрактный класс описываСт Ρ†Π΅Π»ΡƒΡŽ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π΅Π³ΠΎ характСристики Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ это ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ. НапримСр: ΠΊΠΎΡ‚Ρ‹ ΠΈ собаки β€” ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Π΅ (абстрактный класс), Π° ΡƒΠΌΠ΅Π½ΠΈΠ΅ Π±Π΅Π³Π°Ρ‚ΡŒ β€” ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ (интСрфСйс)

  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ описываСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ поля

  • НаслСдник абстрактного класса обязан Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ всС Π΅Π³ΠΎ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅, Π° интСрфСйс создан Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (имплСмСнтирования)

Type

ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ псСвдонимы Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова type

type id = number | string

ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΈΠΌΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΊΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ…:

type Person = {name: string}
type Employee = Person & {company: string}

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ Type ΠΎΡ‚ Interface

  • interface для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° type для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ использованиС этих сущностСй для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚ΠΎ ΠΎΠ½ΠΈ взаимозамСняСмы. Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ Π½Π΅ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, Ρ‚ΠΎ для Π½ΠΈΡ… ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ type:

type Callback = (event: any) => void
type UUID = string
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΈΠΏΡ‹ нСльзя

  • ΠŸΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΠΎΠ²

type UUID = string
const uuid: UUID = '...'
  • type Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ Π² слияниС Π² Ρ‚ΠΈΠΏ с ΠΎΠ΄Π½ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π° интСрфСйсы ΡƒΠΌΠ΅ΡŽΡ‚

  • Π’ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π² объСдинСниС (|) ΠΈ Π² пСрСсСчСниС (&), Π° интСрфСйсы Π½Π΅ ΡƒΠΌΠ΅ΡŽΡ‚

Last updated