Typescript+mobx
Друзья, привет. Заткнулся на одном моменте и не могу его решить. Код почистил для демонстрации от всего лишнего. Есть стор с методом "changeChartData". Этот метод принимает некоторую дату и название стора, чтобы потом положить эту дату в соответствующий стор. Название стора в методе используется как индекс. И как раз тут у меня возникает проблема на строчке: "this[chartName] = data" Выскакивает ошибка:
"Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'ChartStore'. No index signature with a parameter of type 'string' was found on type 'ChartStore'. TS7053 " Которая говорит, что chartName нужно определить как индекс, но как это сделать - я понять не могу. Гуглил, но к своей ситуации применить не получается. Добавлял к своему интерфейсу "[key: string]: any;" - не помогает.
import {makeAutoObservable} from "mobx";
import {sortBy} from 'lodash';
import _ from "lodash";
interface ChartsProps{
name?:any;
value?:any;
}
class ChartStore {
debtChartData:ChartsProps[] = [];
bonusesChartData:ChartsProps[] = [];
periodsChartData:ChartsProps[] = [];
constructor() {makeAutoObservable(this)}
changeChartData(data:ChartsProps[], chartName:string){
//Тут добавляем данные в одну из трех переменных чарта, которые объявлены выше.Куда добавлять - зависит от пришедшего chartname.
this[chartName] = data;
}
}
export default new ChartStore();
Ответы (1 шт):
Я бы посоветовал определить конкретные строковые значения для параметра chartName. Тогда ts будет знать, что вы собираетесь присвоить значения только определенным полям класса
Это могло бы выглядеть вот так
changeChartData(data: ChartsProps[], chartName: 'debtChartData' | 'bonusesChartData' | 'periodsChartData') {
this[chartName] = data;
}