В TypeScript индексируемый тип относится к типу, который позволяет получать доступ к своим свойствам с помощью индекса, обычно строки или числа. Эта концепция аналогична тому, как можно получить доступ к массивам и объектам с помощью индексов или ключей. В TypeScript существует несколько способов определения индексируемых типов и работы с ними. Вот некоторые методы и концепции, связанные с индексируемыми типами:
-
Сигнатуры индексов. TypeScript предоставляет сигнатуры индексов для определения индексируемых типов. В сигнатуре индекса используются квадратные скобки [] для указания типа индекса и типа соответствующего значения свойства. Например:
interface MyIndexableType { }В этом примере
MyIndexableType— это индексируемый тип, где индекс представляет собой строку, а значения свойств — числа. -
Подписи индекса только для чтения. Вы также можете сделать подписи индекса доступными только для чтения, используя модификатор
readonly. Это предотвращает присвоение новых значений свойствам через индекс. Например:interface MyReadonlyType { readonly [index: string]: string; }В этом случае к свойствам
MyReadonlyTypeможно получить доступ с помощью строковых индексов, но их значения нельзя изменить. -
Числовые сигнатуры индексов. TypeScript также поддерживает числовые сигнатуры индексов, где индекс представляет собой число. Например:
interface MyNumericType { }В данном случае
MyNumericType— это индексируемый тип, где индекс представляет собой число, а значения свойств — строки. -
keyof. Оператор
keyofв TypeScript позволяет получить тип объединения всех ключей в объекте или интерфейсе. Его можно использовать с индексируемыми типами для получения списка всех возможных значений индекса. Например:interface MyIndexableType { } type MyIndexKeys = keyof MyIndexableType; // MyIndexKeys will be a union type "string | number"В этом случае
MyIndexKeysбудет типом объединения, представляющим все возможные значения индекса дляMyIndexableType. -
Доступ к индексируемым типам. Чтобы получить доступ к свойствам индексируемого типа, вы можете использовать квадратные скобки [] со значением индекса. Например:
let myIndexable: MyIndexableType = { "key1": 123, "key2": 456 }; let value1 = myIndexable["key1"]; // Accessing property using string index let value2 = myIndexable["key2"]; // Accessing property using string index
Оператор