Понимание индексируемых типов в TypeScript: методы и использование

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

  1. Сигнатуры индексов. TypeScript предоставляет сигнатуры индексов для определения индексируемых типов. В сигнатуре индекса используются квадратные скобки [] для указания типа индекса и типа соответствующего значения свойства. Например:

    interface MyIndexableType {
    }

    В этом примере MyIndexableType— это индексируемый тип, где индекс представляет собой строку, а значения свойств — числа.

  2. Подписи индекса только для чтения. Вы также можете сделать подписи индекса доступными только для чтения, используя модификатор readonly. Это предотвращает присвоение новых значений свойствам через индекс. Например:

    interface MyReadonlyType {
    readonly [index: string]: string;
    }

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

  3. Числовые сигнатуры индексов. TypeScript также поддерживает числовые сигнатуры индексов, где индекс представляет собой число. Например:

    interface MyNumericType {
    }

    В данном случае MyNumericType— это индексируемый тип, где индекс представляет собой число, а значения свойств — строки.

  4. Оператор

  5. keyof. Оператор keyofв TypeScript позволяет получить тип объединения всех ключей в объекте или интерфейсе. Его можно использовать с индексируемыми типами для получения списка всех возможных значений индекса. Например:

    interface MyIndexableType {
    }
    type MyIndexKeys = keyof MyIndexableType;  // MyIndexKeys will be a union type "string | number"

    В этом случае MyIndexKeysбудет типом объединения, представляющим все возможные значения индекса для MyIndexableType.

  6. Доступ к индексируемым типам. Чтобы получить доступ к свойствам индексируемого типа, вы можете использовать квадратные скобки [] со значением индекса. Например:

    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