#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, чтобы он работал!