Деструктурирование объекта: нет совпадающей индексной подписи для строки

#typescript

#typescript

Вопрос:

Я пытаюсь написать код, который получает строковую переменную и получает свойство с этим именем, но я попытался использовать деструктурирование объекта следующим образом:

 export type Filter = {
  key: string
  value: string | number
  limit: number
  after: boolean
}
const pagFilter: Filter = { key: 'banana', value: 'banana2', limit: '10', after: 'id' }

const key = 'value'
const {[key]: obtainedValue} = pagFilter
 

Это показывает Type 'Filter' has no matching index signature for type 'string' сообщение для меня. Однако, выполняя

 const key = 'value'
const obtainedValue = pagFilter[key]
 

нет.

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

 export type FilterType = { [key: string]: string | number | boolean }
export class Filter implements FilterType {
  key: string
  value: string | number
  limit: number
  after: boolean
}
 

Но результаты были теми же.

Мне действительно не разрешено это делать? Мой синтаксис неправильный?

На самом деле моей мотивацией было использовать оператор распространения для получения нового объекта с остальными ключами:

 const {[key]: obtainedValue, ...rest} = pagFilter

 

Я использую typescript 4.1

Ответ №1:

Я узнал!

 const key: keyof Filter = 'value'
const {[key]: obtainedValue} = pagFilter
 

Похоже, мне нужно установить, что ключ имеет тип keyof Filter, чтобы он работал!