Как TypeScript решает проблему неизменности JavaScript

Неизменяемые объекты, массивы, кортежи и наборы в TypeScript

Источник: автор

Некоторое время назад я писал об Immutable.js в JavaScript .

Почему? Потому что у JavaScript есть небольшая проблема с неизменностью.
Небольшой обзор, если вы не уверены, что означает неизменность :

[…] неизменяемый объект — это объект, состояние которого нельзя изменить после его создания.
- Гетц и др. Параллелизм Java на практике . Эддисон Уэсли Профессионал, 2006 г.

Когда мы думаем о неизменяемых структурах данных, мы часто думаем о ключевом слове const в JavaScript. Но спойлеры: нет, constобычно не делает наши переменные неизменяемыми.

Неизменяемость константных переменных применяется только к примитивным типам данных.
Вот пример. Например, логические значения и числа являются примитивными типами данных в JavaScript.

const value = 1 
value = 2
// error - we cannot modify the variable

const obj = {
  name: "Max"
}
obj.name = "Tom"

Давайте, вот как добиться неизменности в TypeScript.

Неизменяемые простые объекты в TypeScript

TypeScript перекрывает функцию, называемую интерфейсами — вы можете представить ее как план объекта. Свойства и способ их определения должны применяться к реализованному объекту. Один из способов определить свойство в TS — сделать его доступным только для чтения:

interface Person {
 readonly name: string 
}
const max: Person = {
 name: "Max"
}

Вместо интерфейса мы также можем использовать классы. Здесь также применяется настройка только для чтения.

class Person {
constructor(name: string) {
   this.name = name 
 }
readonly name: string 
}
const max = new Person("Max")

Поскольку массивы также являются объектами, они также могут изменяться в JavaScript. Чтобы избежать этого, мы можем применить настройку только для чтения к нашим массивам:

const names: ReadonlyArray<string> = ["max", "carl"]
names[0] = "tom" // error!

Кортежи работают как массивы, но, напротив, они точно определяют, сколько в них элементов и какого типа.

const fullName: readonly [string, string] = ["John", "Doe"];

И последнее, но не менее важное: давайте поговорим о наборах в TypeScript и о том, как мы можем сделать их неизменяемыми. Набор характеризуется тем, что каждое значение встречается только один раз — хотя вы можете объявить набор с несколькими, одинаковые значения, например , будут напечатаны в терминале 1, 2, 3, 3только в том случае, если вы зарегистрируете набор.1, 2, 3

Неизменяемый набор можно создать с помощью следующей строки:

let numberSet: ReadonlySet<number> = new Set([1, 2, 3])

Спасибо за чтение!

Больше контента на plainenglish.io

Suggested posts

Поиск информации о доменных именах

Отрывок из книги «Маленькие программные инструменты Sharp» Брайана П. Хогана.

Поиск информации о доменных именах

Когда вы делаете запрос на facebook.com, ваш компьютер ищет доменное имя, чтобы преобразовать это доменное имя в IP-адрес, чтобы ваш компьютер мог установить это соединение.

Революция без программирования: обеспечение процветания бизнеса с помощью Webflow, Framer, Bubble.io,

Революция без программирования: обеспечение процветания бизнеса с помощью Webflow, Framer, Bubble.io,

Отправляйтесь в захватывающее путешествие инноваций и успеха, используя неиспользованный потенциал этих удивительных платформ без кода. Позвольте мне поделиться с вами историей о Сапне, замечательной женщине-предпринимателе.

Related posts

Преследование христиан: преступление на почве ненависти, о котором мы не говорим

Забудьте об исламофобии: христиане (и евреи) являются главными жертвами преступлений на почве религиозной ненависти.

Преследование христиан: преступление на почве ненависти, о котором мы не говорим

Любой здравомыслящий человек знает, что в политических и медийных кругах доминируют левые, даже крайне левые, что создает дисбаланс в политическом дискурсе. В области религии этот дисбаланс хорошо виден: левые газеты и сети не спешат защищать христианскую веру.

Журнал

Журнал

Открытый дневник: картинка в день. Меня всегда завораживали истории.

БЕЗГРАНИЧНАЯ ЖИЗНЬ

Когда вы вырастаете, вам, как правило, говорят, что мир такой, какой он есть, и ваша жизнь состоит в том, чтобы просто жить своей жизнью внутри мира, никогда не рискуя своей жизнью, просто следовать установленному пути и умереть в конце, и стараться не слишком сильно бить стены. Но это очень ограниченная жизнь.

Сольное выступление рыжеволосой девушки

По заданию Хайдена Кэти снимает, как она мастурбирует.

Сольное выступление рыжеволосой девушки

Было уже за полночь, когда Хейден отвез Кэти обратно в общежитие колледжа после их совместного вечера. У нее был ранний урок утром, и у нее не было другой смены одежды после того, как она осталась с ним прошлой ночью.