πŸ‘©β€πŸ’» ОбьСдинСниС ΠΈ пСрСсСчСниС Ρ‚ΠΈΠΏΠΎΠ² Π² Typescript

TypeScript ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΠΌΠΎΡ‰Π½Ρ‹Π΅ инструмСнты для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ пСрСсСчСния (&) ΠΈ объСдинСния (|). Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ свойствами. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² &

ΠŸΠ΅Ρ€Π΅ΡΠ΅Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ свойства ΠΎΠ±ΠΎΠΈΡ… исходных Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСт свойства Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: `interface Person { name: string; }

interface Employee { id: number; }

type PersonEmployee = Person & Employee;

const personEmployee: PersonEmployee = { name: 'Иван Иванов', id: 12345, };

Π—Π΄Π΅ΡΡŒ PersonEmployee β€” это Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠ±Π° свойства: name ΠΎΡ‚ интСрфСйса Person ΠΈ id ΠΎΡ‚ интСрфСйса Employee.

ОбъСдинСниС Ρ‚ΠΈΠΏΠΎΠ² |

ОбъСдинСниС Ρ‚ΠΈΠΏΠΎΠ² создаСт Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния любого ΠΈΠ· ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ€: `type StringOrNumber = string | number;

let value: StringOrNumber; value = 'ΠŸΡ€ΠΈΠ²Π΅Ρ‚'; // OK value = 42; // OK value = true; // Ошибка! Π’ΠΈΠΏ boolean Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² StringOrNumber

Π—Π΄Π΅ΡΡŒ StringOrNumber β€” это Ρ‚ΠΈΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ строкой, Π»ΠΈΠ±ΠΎ числом.

ИспользованиС Π² ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π­Ρ‚ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ бСзопасности Ρ‚ΠΈΠΏΠΎΠ² ΠΈ удобства Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. НапримСр, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ функция, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ объСдинСниС:

function printValue(value: string | number) { console.log(Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: ${value}`); }

printValue('Π‘Ρ‚Ρ€ΠΎΠΊΠ°'); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚: Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: Π‘Ρ‚Ρ€ΠΎΠΊΠ° printValue(100); // Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚: Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: 100

Или Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄Π²ΡƒΡ… сущностСй Π² ΠΎΠ΄Π½Ρƒ, ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ пСрСсСчСниС:

`interface UserData { username: string; email: string; }

interface AdditionalInfo { age: number; city: string; }

type FullUserProfile = UserData & AdditionalInfo;

const user: FullUserProfile = { username: 'alice', email: '[email protected]', age: 30, city: 'Москва' };````

repost

37

input message

Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚

Π΅Ρ‰Π΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² этом сообщСствС

Π΅Ρ‰Π΅ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π² этом соообщСствС

Π²ΠΎΠΉΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ

ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ Π½Π° интСрСсных ΠΏΡ€ΠΎΡ„ΠΈ

Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ большС возмоТностСй

ΠΏΠΎΠΊΠ° Π² Π²Π΅Π±-вСрсии Π΅ΡΡ‚ΡŒ Π½Π΅ всё β€” ΠΌΡ‹ вовсю Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ Π½Π΅ΠΉ

сСтка β€” cΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΡΠ΅Ρ‚ΡŒ для Π½Π΅Ρ‚Π²ΠΎΡ€ΠΊΠΈΠ½Π³Π° ΠΎΡ‚ hh.ru

ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΠΉΡ‚Π΅ΡΡŒ с Ρ‚Π΅ΠΌΠΈ, ΠΊΡ‚ΠΎ повлияСт Π½Π° ваш ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ